在Spring中使用Hibernate的困难:由以下原因引起:org.hibernate.AnnotationException:使用@OneToMany或@ManyToMany定位未映射的类:

时间:2013-02-22 12:13:47

标签: java spring hibernate spring-mvc orm

我是Spring ORM的新手,我正在尝试实现这个Spring + Hibernate教程:

http://it4beginners.wordpress.com/2012/10/05/spring-3-and-hibernate-4-for-beginners/

唯一的区别是我没有使用 PostgreSQL ,但我使用 MySql 数据库,所以我在pom.xml文件中插入了正确的MySql连接器已更改 ApplicationContext.xml 配置文件中的mainDataSource属性...

问题是,当我运行 App.java 类(包含main方法的主类)时,我在stacktrace中获取以下错误消息:

Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: org.andrea.myexample.myHibernateSpringExample.entityclasses.ChemicalStructure.occurence[java.lang.Object]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1057)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:733)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:668)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1597)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:357)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 12 more

我不明白问题在哪里!!!

这是似乎存在问题的类的代码:

package org.andrea.myexample.myHibernateSpringExample.entityclasses;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "chemical_structure")
public class ChemicalStructure implements Serializable {

private Long id;
private String structureKey;
private String structureData;
private Set<Object> occurence;

/**
 * @return the id
 */
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "chem_structure_seq_gen")
@SequenceGenerator(name = "chem_structure_seq_gen", sequenceName = "seq_chemical_structure")
@Column(name = "structure_id")
public Long getId() {
    return id;
}

/**
 * @param id
 *            the id to set
 */
public void setId(Long id) {
    this.id = id;
}

/**
 * @return the structureKey
 */
@Column(name = "structure_key", unique = true)
public String getStructureKey() {
    return structureKey;
}

/**
 * @param structureKey
 *            the structureKey to set
 */
public void setStructureKey(String structureKey) {
    this.structureKey = structureKey;
}

/**
 * @return the structureData
 */
@Column(name = "chemical_structure")
public String getStructureData() {
    return structureData;
}

/**
 * @param structureData
 *            the structureData to set
 */
public void setStructureData(String structureData) {
    this.structureData = structureData;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.chemicalStructure", cascade = CascadeType.ALL)
public Set<Object> getOccurence() {
    return occurence;
}

public void setOccurence(Set<Object> occurence) {
    this.occurence = occurence;
}
}
你知道吗?

TNX

2 个答案:

答案 0 :(得分:1)

该错误的原因在于您尝试映射一组普通对象。 Object不是JPA实体,因此无法映射到关系类型。

您需要创建一个名为Occurence的实体,并按照对象集的方式对其进行映射。

答案 1 :(得分:0)

我认为这里的问题是mapBy =“pk.chemicalStructure” 检查此类中是否有ManyToOne关系,如:

@ManyToOne
@JoinColumn(name = "chemicalstructure_id", nullable = false)
@ForeignKey(name = "fk_chemicalstructure_id")
private Occurence occurence;

然后mappedBy =“出现”

错误表示缺少这种双向关系。