首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JPA中配备ManyToOne和OneToMany的双向

2012-09-24 
JPA中配置ManyToOne和OneToMany的双向关键要记住下面一句话:多的一方为关系维护端,关系维护端负责外键记录

JPA中配置ManyToOne和OneToMany的双向

关键要记住下面一句话:

多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端是没有权利更新外键记录。


注意:(亲身经历哦~~)
我晕,找了好久的错误,发现是自己图方便没有用@Table标注,结果生成表的表名为对应的类名,刚好
是MySQL的关键字group,以后还是最好加上@Table标注,并且表名最好以“t_”开头。

?

关系维护端(多的一方)

package contactbook.domain;import java.io.Serializable;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;@Entity@Table(name="t_contacts")public class Contact implements Serializable{private static final long serialVersionUID = 5630087178466798365L;private Integer id;private String name;private String phone;private String email;private String address;private Group group;public Contact() {super();}public Contact(String name, String phone, String email, String address) {super();this.name = name;this.phone = phone;this.email = email;this.address = address;}@Id@GeneratedValuepublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)@JoinColumn(name="groupid")public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}@Overridepublic String toString() {return "name:"+name+",phone:"+phone+",email:"+email+",address:"+address;}}
?

关系被维护端(一的一方)

package contactbook.domain;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="t_groups")public class Group implements java.io.Serializable{private static final long serialVersionUID = -6948198014545065959L;private Integer id;private String name;private Set<Contact> contacts = new HashSet<Contact>();public Group() {super();}public Group(String name) {super();this.name = name;}@Id@GeneratedValuepublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@OneToMany(mappedBy="group",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.EAGER)public Set<Contact> getContacts() {return contacts;}public void setContacts(Set<Contact> contacts) {this.contacts = contacts;}//添加方便public void addContacts(Contact contact){contact.setGroup(this);//通过多端来维护他们的关系,外键在多端this.contacts.add(contact);}@Overridepublic String toString() {return "id:"+id+",name:"+name;}}

? 测试:

package contactbook.test;import java.util.List;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import contactbook.domain.Contact;import contactbook.domain.Group;import contactbook.service.GroupService;public class TestGroup {private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");private GroupService groupService = (GroupService) ac.getBean("groupService");@Testpublic void testSave(){Group g = new Group("同学");Contact c1 = new Contact("小红","13729767419","xiaohong@163.com","江西");Contact c2 = new Contact("刘俊","13753449488","lj1987@163.com","昆明");g.addContacts(c1);g.addContacts(c2);groupService.save(g);}@Testpublic void testFindAll(){List<Group> gList = groupService.findAll();System.out.println(gList);for(Group g:gList){System.out.println("id:"+g.getId()+","+g.getContacts());}}}
? 省略了applicationContext.xml代码,和src/META-INF/persistence.xml和dao和service代码。

热点排行