0
我无法一一映射OrderApprovalLevels
和QuoteApprovalLevels
与UserCustomer
。我收到以下错误:休眠映射问题 - 一对一
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;
}
是的..我们有柱orderApprovalLevelId这映射为外键到表oqt_customer_approval级别。 – simba
我已经添加了上面的代码。 – simba
查看堆栈跟踪我不确定它是否是错误的原因,但是您在字段(字段访问)以及getter(属性访问)上使用映射注释,在这种情况下行为未定义。所以你必须首先纠正,如果它仍然没有工作,至少你已经排除了一个可能的原因。对于定义混合访问模式看看我的答案[这个问题](http://stackoverflow.com/questions/38728671/column-annotation-does-not-work/38730149#38730149)。 – ujulu