JPAでのManyToOneとOneToManyの双方向設定
重要なのは、次の言葉を覚えておくことです.
複数の一方は関係メンテナンス側であり、関係メンテナンス側は外部キー記録の更新を担当し、関係被メンテナンス側は外部キー記録を更新する権利がない.
注意:(身をもって経験します~~)私は気を失って、长い间の间违いを探して、自分の図が便利で@Tableで表示していないことを発见して、结果は表の表名を生成して対応する类名で、ちょうどMySQLのキーワードグループで、后でやはり@Tableの表示をプラスしたほうがよくて、しかも表名は“t_”はじめに.
リレーショナル・メンテナンス・エンド(複数の側)
関係が維持される側(一方)
テスト:
複数の一方は関係メンテナンス側であり、関係メンテナンス側は外部キー記録の更新を担当し、関係被メンテナンス側は外部キー記録を更新する権利がない.
注意:(身をもって経験します~~)私は気を失って、长い间の间违いを探して、自分の図が便利で@Tableで表示していないことを発见して、结果は表の表名を生成して対応する类名で、ちょうどMySQLのキーワードグループで、后でやはり@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
@GeneratedValue
public 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;
}
@Override
public 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
@GeneratedValue
public 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);
}
@Override
public 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");
@Test
public void testSave(){
Group g = new Group(" ");
Contact c1 = new Contact(" ","13729767419","[email protected]"," ");
Contact c2 = new Contact(" ","13753449488","[email protected]"," ");
g.addContacts(c1);
g.addContacts(c2);
groupService.save(g);
}
@Test
public void testFindAll(){
List<Group> gList = groupService.findAll();
System.out.println(gList);
for(Group g:gList){
System.out.println("id:"+g.getId()+","+g.getContacts());
}
}
}
アプリケーションContextは省略する.xmlコードとsrc/META-INF/persistence.xmlとdaoとserviceコード.