簡體   English   中英

Hibernate SQL參考異常

[英]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;
  1. 我的客戶帳單地址模型

    @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM