org.hibernate.AnnotationException:使用@OneToMany 或@ManyToMany 定位未映射的 class
org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class
我正在尝试对产品规格使用 onetomany 映射,我从描述中复制了类似的工作代码。我提供我所有的代码。
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: sm-unit] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 38 more
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.salesmanager.core.business.catalog.product.model.Product.specifications[com.salesmanager.core.business.catalog.product.model.specification.ProductSpecification]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1204)
Product.java 有这样的条目:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "product")
private Set<ProductSpecification> specifications = new HashSet<ProductSpecification>();
ProductSpecification.java 有以下代码..
@Entity
@Table(name = "PRODUCT_SPECIFICATION", schema=SchemaConstant.BEAWLP_JAMBIRA_SCHEMA)
public class ProductSpecification extends SalesManagerEntity<Long, ProductSpecification> {
private static final long serialVersionUID = -7991123525661321865L;
@ManyToOne(targetEntity = Product.class)
@JoinColumn(name = "PRODUCT_ID", nullable = false)
private Product product;
@Id
@Column(name = "SPECIFICATION_ID", unique = true, nullable = false)
@TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "SPECIFICATION_SEQ_NEXT_VAL")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
private Long id;
@Column(name="TITLE", length=100)
private String title;
public ProductSpecification() {
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
我想你错过了 targetEntity,试试下面这行它可能对你有帮助。
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "product", targetEntity = ProductSpecification.class)
private Set<ProductSpecification> specifications = new HashSet<ProductSpecification>();
从报错信息可知实体映射不正确
- 确保您导入的是
javax.persistence.entity
而不是 org.hibernate.annotations.entity
。
- 另外,确保该实体在配置文件中列出(persistence.xml、hibernate.cfg.xml)。
我注意到在使用 Set 和 HashSet 时会出现异常。您可以改为使用 List 和 ArrayList
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "product")
private List<ProductSpecification> specifications = new ArrayList<ProductSpecification>();
对我来说,通过将 class 添加到
来修复它
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="sample" />
<property name="annotatedClasses">
<list>
<value>******************</value>
我正在尝试对产品规格使用 onetomany 映射,我从描述中复制了类似的工作代码。我提供我所有的代码。
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: sm-unit] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 38 more
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.salesmanager.core.business.catalog.product.model.Product.specifications[com.salesmanager.core.business.catalog.product.model.specification.ProductSpecification]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1204)
Product.java 有这样的条目:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "product")
private Set<ProductSpecification> specifications = new HashSet<ProductSpecification>();
ProductSpecification.java 有以下代码..
@Entity
@Table(name = "PRODUCT_SPECIFICATION", schema=SchemaConstant.BEAWLP_JAMBIRA_SCHEMA)
public class ProductSpecification extends SalesManagerEntity<Long, ProductSpecification> {
private static final long serialVersionUID = -7991123525661321865L;
@ManyToOne(targetEntity = Product.class)
@JoinColumn(name = "PRODUCT_ID", nullable = false)
private Product product;
@Id
@Column(name = "SPECIFICATION_ID", unique = true, nullable = false)
@TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "SPECIFICATION_SEQ_NEXT_VAL")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
private Long id;
@Column(name="TITLE", length=100)
private String title;
public ProductSpecification() {
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
我想你错过了 targetEntity,试试下面这行它可能对你有帮助。
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "product", targetEntity = ProductSpecification.class)
private Set<ProductSpecification> specifications = new HashSet<ProductSpecification>();
从报错信息可知实体映射不正确
- 确保您导入的是
javax.persistence.entity
而不是org.hibernate.annotations.entity
。 - 另外,确保该实体在配置文件中列出(persistence.xml、hibernate.cfg.xml)。
我注意到在使用 Set 和 HashSet 时会出现异常。您可以改为使用 List 和 ArrayList
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE, mappedBy = "product")
private List<ProductSpecification> specifications = new ArrayList<ProductSpecification>();
对我来说,通过将 class 添加到
来修复它<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="sample" />
<property name="annotatedClasses">
<list>
<value>******************</value>