![](/img/trans.png)
[英]Hibernate @Formula annotation causing sql exception errors when hibernate inserts table reference inappropriately
[英]Hibernate SQL Reference Exception
今天,我試圖使用Hibernate Annotation將Customer添加到數據庫中,但是我不知道為什么我要面對引用表的問題!
請閱讀下面的異常
錯誤:參照完整性約束違反:
“ FKOFMCQE0O4K2TFOXB308SKTMQ3:PUBLIC.CUSTOMER外鍵(CUS_BILLINGADDRESSID)參考PUBLIC.CUSTOMERBILLINGADDRESS(CUS_BILLINGADDRESSID)('CBA00001')”; SQL語句:更新客戶集cus_emailid = ?、 cus_mobileno = ?、 cus_name = ?、 cus_billingaddressid = ?、 cus_cartid = ?、 cus_loginid = ?、 cus_shippingaddressid =? cus_id =在哪里? [23506-193] 2017年4月1日,下午7:09:57 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl版本INFO:HHH000010:在批處理版本中,它仍然包含JDBC語句2017年4月1日7:09: 57 PM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure錯誤:HHH000346:托管刷新期間發生錯誤[org.hibernate.exception.ConstraintViolationException:無法執行語句] 2017年4月1日,下午org.apache.catalina.core。 StandardWrapperValve在路徑[/ TechNXT]的上下文中為Servlet [dispatcher]調用SEVERE:Servlet.service()引發異常[請求處理失敗; 嵌套的異常是javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:無法執行語句],根本原因是org.h2.jdbc.JdbcSQLException:參照完整性約束沖突:“ FKOFMCQE0O4K2TFOXB308SKTMQ3:PUBLIC.CUSTOMERUSESSID_KEY() PUBLIC.CUSTOMERBILLINGADDRESS(CUS_BILLINGADDRESSID)('CBA00001')“; SQL語句:更新客戶集cus_emailid = ?、 cus_mobileno = ?、 cus_name = ?、 cus_billingaddressid = ?、 cus_cartid = ?、 cus_loginid = ?、 cus_shippingaddressid =? cus_id =在哪里? [23506-192]於org.h2.message.DbException.get(org.h2.message.DbException.get(DbException.java:179)於org.h2.message.DbException.getJdbcSQLException(DbException.java:345) org.h2.constraint.ConstraintReferential.checkRowOwnTable(ConstraintReferential.java:372)處的DbException.java:155)org.h2.table.Table.fireConstraints處的org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:314)處(Table.java:967)在org.h2.table.Table.fireAfterRow(Table.java:985)在org.h2.command.dml.Update.update(Update.java:151)在org.h2.command。 org.h2.command上的CommandContainer.update(CommandContainer.java:98)org.h2.server上的Command.executeUpdate(Command.java:258).org.h2.server上的TcpServerThread.process(TcpServerThread.java:344) .TcpServerThread.run(TcpServerThread.java:158)at java.lang.Thread.run(未知源)
這是我的兩個模型表注意:我已經生成了getters和setters,但是沒有發布,因此使它們變得盡可能小1. Customer表具有其他表的引用
@Entity
public class Customer {
@Id
private String cus_id;
private String cus_name;
private String cus_emailid;
private String cus_mobileno;
@OneToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="cus_loginid")
private CustomerDetails customerdetails;
@OneToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="cus_billingaddressid")
private CustomerBillingAddress customerbillingaddress;
@OneToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="cus_shippingaddressid")
private CustomerShippingAddress customershippingaddress;
@OneToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="cus_cartid")
private CustomerCart customercart;
我的客戶帳單地址模型
@Entity公共類CustomerBillingAddress {
@Id private String cus_billingaddressid; private String cus_houseno; private String cus_street; private String cus_area; private String cus_city; private String cus_state; private String cus_country; private String cus_pincode; @OneToOne(mappedBy="customerbillingaddress") private Customer customer;
類似的其他型號
最后是將客戶添加到數據庫的我的DAO方法
這是代碼!
@Transactional
public String addCustomer(Customer customer) {
System.out.println("CustomerDao -TechNXT\n");
Session ses = sf.openSession();
customer.setCus_id(generateCustomerid());
customer.setCustomerbillingaddress(new CustomerBillingAddress());
customer.setCustomershippingaddress(new CustomerShippingAddress());
customer.setCustomercart(new CustomerCart());
customer.getCustomerdetails().setCus_loginid(generateCustomerLoginid());
customer.getCustomerbillingaddress().setCus_billingaddressid(generateCustomerBillingid());
customer.getCustomershippingaddress().setCus_shippingaddressid(generateCustomershippingid());
customer.getCustomercart().setCus_cartid(generateCustomerCartid());
customer.getCustomerdetails().setCus_isenabled(true);
customer.getCustomerdetails().setCus_role("ROLE_USER");
Transaction tr = ses.beginTransaction();
ses.save(customer);
tr.commit();
ses.close();
return customer.getCustomerdetails().getCus_loginid();
}
好吧,自3小時以來,我一直在嘗試一些東西,但未能獲得解決方案! 抱歉,抽出寶貴的時間。 在此先感謝您對我的幫助!
您可以在課程上標記@Table注釋嗎
喜歡
@Table(name ="Customer")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.