Hibernate:当一列具有一对多关系,而另一列未使用IDClass时,如何在组合键中持久化数据?
以下是用例: 复合密钥类Hibernate:当一列具有一对多关系,而另一列未使用IDClass时,如何在组合键中持久化数据?,hibernate,jpa,hibernate-mapping,composite-key,Hibernate,Jpa,Hibernate Mapping,Composite Key,以下是用例: 复合密钥类 public class AgreementPeriodID implements Serializable { private static final long serialVersionUID = 1L; @Column(name = "PERIODID") private String pid; @ManyToOne @JoinColumn(name = "AGRID") private CustomerAg
public class AgreementPeriodID implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "PERIODID")
private String pid;
@ManyToOne
@JoinColumn(name = "AGRID")
private CustomerAgreement customerAgreement;
}
多对一类
@IdClass(AgreementPeriodID.class)
public class CustomerAgreementPeriod implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@ManyToOne
@JoinColumn(name = "AGRID")
private CustomerAgreement customerAgreement;
@Id
@Column(name = "PERIODID")
private String pid;
一对多主类:
public class CustomerAgreement implements Serializable {
@OneToMany(mappedBy = "customerAgreement", orphanRemoval = true, fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
private List<CustomerAgreementPeriod> agreementPeriods;
公共类CustomerAgreement实现可序列化{
@OneToMany(mappedBy=“customerAgreement”,orphanRemoving=true,fetch=FetchType.LAZY,cascade={CascadeType.PERSIST})
私人名单协议期限;
主要类别:
public static List<CustomerAgreement> ra() {
List<CustomerAgreement> li = new ArrayList<CustomerAgreement>();
CustomerAgreement cAgreement = new CustomerAgreement();
cAgreement.setId(321212121l);
cAgreement.setName("Harpreet");;
cAgreement.setCustomerId("140");
List<CustomerAgreementPeriod> cap = new ArrayList<>();
CustomerAgreementPeriod capy = new CustomerAgreementPeriod();
capy.setPid("1");
capy.setValidFrom(new Date());
capy.setValidTo(new Date());
capy.setCustomerAgreement(cAgreement);
CustomerAgreementPeriod capy2 = new CustomerAgreementPeriod();
capy2.setPid("2");
capy2.setValidFrom(new Date());
capy2.setValidTo(new Date());
capy2.setCustomerAgreement(cAgreement);
cap.add(capy);
cap.add(capy2);
cAgreement.setAgreementPeriods(cap);
li.add(cAgreement);
CustomerAgreement cAgreement2 = new CustomerAgreement();
cAgreement2.setId(321212122l);
cAgreement2.setName("Harpreet");;
cAgreement2.setCustomerId("140");
List<CustomerAgreementPeriod> cap1 = new ArrayList<>();
CustomerAgreementPeriod capy1 = new CustomerAgreementPeriod();
capy1.setPid("1");
capy1.setValidFrom(new Date());
capy1.setValidTo(new Date());
capy1.setCustomerAgreement(cAgreement2);
CustomerAgreementPeriod capy23 = new CustomerAgreementPeriod();
capy23.setPid("2");
capy23.setValidFrom(new Date());
capy23.setValidTo(new Date());
capy23.setCustomerAgreement(cAgreement2);
cap1.add(capy1);
cap1.add(capy23);
cAgreement2.setAgreementPeriods(cap1);
li.add(cAgreement2);
CustomerAgreement cAgreement3 = new CustomerAgreement();
cAgreement3.setId(321212123l);
cAgreement3.setName("Harpreet");;
cAgreement3.setCustomerId("140");
List<CustomerAgreementPeriod> cap12 = new ArrayList<>();
CustomerAgreementPeriod capy12 = new CustomerAgreementPeriod();
capy12.setPid("1");
capy12.setValidFrom(new Date());
capy12.setValidTo(new Date());
capy12.setCustomerAgreement(cAgreement3);
CustomerAgreementPeriod capy234 = new CustomerAgreementPeriod();
capy234.setPid("2");
capy234.setValidFrom(new Date());
capy234.setValidTo(new Date());
capy234.setCustomerAgreement(cAgreement3);
cap12.add(capy12);
cap12.add(capy234);
cAgreement3.setAgreementPeriods(cap12);
li.add(cAgreement3);
return li;
}
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("IntegratorMasterdataPU");
em = emf.createEntityManager();
// CustomerAgreement cAgreement = em.find(CustomerAgreement.class, 32121212l);
// em.getTransaction().begin();
// em.remove(cAgreement);
// em.getTransaction().commit();
em.getTransaction().begin();
for(CustomerAgreement ca: ra()) {
em.persist(ca);
}
em.flush();
//
}
公共静态列表ra(){
List li=new ArrayList();
CustomerAgreement=新CustomerAgreement();
卡格里门特.塞蒂(32121L);
cAgreement.setName(“Harpreet”);;
cAgreement.setCustomerId(“140”);
列表上限=新的ArrayList();
CustomerAgreementPeriod capy=新CustomerAgreementPeriod();
capy.setPid(“1”);
capy.setValidFrom(新日期());
capy.setValidTo(新日期());
capy.设置客户协议(cAgreement);
CustomerAgreementPeriod capy2=新CustomerAgreementPeriod();
capy2.setPid(“2”);
capy2.setValidFrom(新日期());
capy2.setValidTo(新日期());
capy2.设置客户协议(cAgreement);
第2章增补(capy);
第2章增补(第2章);
协议期限(上限);
li.添加(cAgreement);
CustomerAgreement2=新CustomerAgreement();
cAgreement2.setId(3212122l);
cAgreement2.setName(“Harpreet”);;
cAgreement2.setCustomerId(“140”);
List cap1=new ArrayList();
CustomerAgreementPeriod capy1=新CustomerAgreementPeriod();
capy1.setPid(“1”);
capy1.setValidFrom(新日期());
capy1.setValidTo(新日期());
capy1.设置客户协议(cAgreement2);
CustomerAgreementPeriod capy23=新CustomerAgreementPeriod();
capy23.设置PID(“2”);
capy23.setValidFrom(新日期());
capy23.setValidTo(新日期());
capy23.设置客户协议(cAgreement2);
第1章.增补(第1章);
第1章.增补(第23章);
cAgreement2.设定协议期限(cap1);
li.添加(cAgreement2);
CustomerAgreement3=新CustomerAgreement();
cAgreement3.setId(3212123l);
cAgreement3.setName(“Harpreet”);;
cAgreement3.设置客户ID(“140”);
List cap12=新的ArrayList();
CustomerAgreementPeriod capy12=新CustomerAgreementPeriod();
capy12.设置PID(“1”);
capy12.setValidFrom(新日期());
capy12.setValidTo(新日期());
capy12.设置客户协议(cAgreement3);
CustomerAgreementPeriod capy234=新CustomerAgreementPeriod();
capy234.设定PID(“2”);
capy234.setValidFrom(新日期());
capy234.setValidTo(新日期());
capy234.设置客户协议(cAgreement3);
第12章.增补(第12章);
第12章.增补(第234章);
cAgreement3.设定协议期限(第12章);
li.添加(cAgreement3);
返回李;
}
公共静态void main(字符串[]args){
EntityManagerFactory emf=Persistence.createEntityManagerFactory(“IntegratorMasterdataPU”);
em=emf.createEntityManager();
//CustomerAgreement=em.find(CustomerAgreement.class,321212L);
//em.getTransaction().begin();
//em.remove(cAgreement);
//em.getTransaction().commit();
em.getTransaction().begin();
对于(CustomerAgreement ca:ra()){
em.persist(ca);
}
em.flush();
//
}
它显示所有Insert语句,但不在数据库中持久化数据?
我缺少什么吗?您不需要提交事务吗?刷新!=提交。@AlanHay:正确