2016-08-04 109 views
0

我无法一一映射OrderApprovalLevelsQuoteApprovalLevelsUserCustomer。我收到以下错误:休眠映射问题 - 一对一

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: oqtPersistenceUnit] Unable to build EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915) [hibernate-entitymanager-3.6.10.Final.jar:3.6.10.Final] 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74) [hibernate-entitymanager-3.6.10.Final.jar:3.6.10.Final] 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288) [spring-orm-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) [spring-orm-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) [spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) [spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] 
    ... 33 more 
Caused by: org.hibernate.HibernateException: Missing column: orderApprovalLevel in poqt01.oqt_user_ic01 

源代码

/** 
* Created with IntelliJ IDEA. 
* User: vartiwari 
* Date: 2/1/16 
* Time: 5:22 PM 
* To change this template use File | Settings | File Templates. 
*/ 
@SuppressWarnings("PMD.UnusedPrivateField") 
@Entity 
@Table(name = "oqt_user_ic01") 
@AssociationOverrides({ 
     @AssociationOverride(name = "pk.user", joinColumns = @JoinColumn(name = "ftId")), 
     @AssociationOverride(name = "pk.customer", joinColumns = @JoinColumn(name = "ic01s")) 
}) 
public class UserCustomer implements Serializable{ 

    //'pk' refers to the composite key for oqt_user_ic01 with columns ftID for User and ic01 for Customer 
    private UserCustomerId pk; 
    private boolean ic01FromMSS; 

    @OneToOne(cascade = CascadeType.ALL) 
    @Column(name = "orderApprovalLevelId") 
    private OrderApprovalLevels orderApprovalLevel; 

    @OneToOne(cascade = CascadeType.ALL) 
    @Column(name = "quoteApprovalLevelId") 
    private QuoteApprovalLevels quoteApprovalLevel; 

    @EmbeddedId 
    public UserCustomerId getPk() { 
     if(pk == null){ 
      pk = new UserCustomerId(); 
     } 
     return pk; 
    } 

    public void setPk(UserCustomerId pk) { 
     this.pk = pk; 
    } 

    @Transient 
    public User getUser() { 
     return getPk().getUser(); 
    } 

    public void setUser(User user){ 
     getPk().setUser(user); 
    } 

    @Transient 
    public Customer getCustomer() { 
     return getPk().getCustomer(); 
    } 

    public void setCustomer(Customer customer){ 
     getPk().setCustomer(customer); 
    } 

    @Column(name = "ic01FromMSS",nullable = false) 
    public boolean isIc01FromMSS() { 
     return ic01FromMSS; 
    } 

    public void setIc01FromMSS(boolean ic01FromMSS) { 
     this.ic01FromMSS = ic01FromMSS; 
    } 


    public OrderApprovalLevels getOrderApprovalLevel() { 
     return orderApprovalLevel; 
    } 

    public void setOrderApprovalLevel(OrderApprovalLevels orderApprovalLevel) { 
     this.orderApprovalLevel = orderApprovalLevel; 
    } 

    public QuoteApprovalLevels getQuoteApprovalLevel() { 
     return quoteApprovalLevel; 
    } 

    public void setQuoteApprovalLevel(QuoteApprovalLevels quoteApprovalLevel) { 
     this.quoteApprovalLevel = quoteApprovalLevel; 
    } 
} 

@Entity 
@Table(name="oqt_customer_quote_approval_levels") 
@Getter 
@Setter 
@NoArgsConstructor 
@SuppressWarnings({"PMD.UnusedPrivateField", "PMD.SingularField"}) 
public class QuoteApprovalLevels implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column 
    private Long id; 
    private Long approvalLevel; 
    private String approvalLabel; 
} 
+0

是的..我们有柱orderApprovalLevelId这映射为外键到表oqt_customer_approval级别。 – simba

+0

我已经添加了上面的代码。 – simba

+0

查看堆栈跟踪我不确定它是否是错误的原因,但是您在字段(字段访问)以及getter(属性访问)上使用映射注释,在这种情况下行为未定义。所以你必须首先纠正,如果它仍然没有工作,至少你已经排除了一个可能的原因。对于定义混合访问模式看看我的答案[这个问题](http://stackoverflow.com/questions/38728671/column-annotation-does-not-work/38730149#38730149)。 – ujulu

回答

0

我认为你需要在oqt_user_ic01使用@JoinColumn为One-to-One关系

@OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "orderApprovalLevelId") 
    private OrderApprovalLevels orderApprovalLevel; 
+0

我们已经试过这个,但它不起作用。 – simba