org.hibernate.MappingException: Unknown entity 使用annotation,javax.persisitence包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了org.hibernate.MappingException: Unknown entity 使用annotation,javax.persisitence包相关的知识,希望对你有一定的参考价值。
这是一个hibernate测试的小程序 本身很简单 我用的hibernate版本是:3.6.10final
我有两个Javabean Student使用hbm.xml配置 一切正常
而Teacher是使用的annotation 代码如下:(Teacher.java)
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
@Entity
public class Teacher
private int id;
private String name;
private String title;
private String yourWifeName;
private Date birthDate;
private boolean good;
private Gender gender;
public Gender getGender()
return gender;
public void setGender(Gender gender)
this.gender = gender;
public boolean isGood()
return good;
public void setGood(boolean good)
this.good = good;
@Transient
public String getYourWifeName()
return yourWifeName;
public void setYourWifeName(String yourWifeName)
this.yourWifeName = yourWifeName;
@Id
@GeneratedValue
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getTitle()
return title;
public void setTitle(String title)
this.title = title;
@Temporal(TemporalType.TIME)
public Date getBirthDate()
return birthDate;
public void setBirthDate(Date birthDate)
this.birthDate = birthDate;
在Junit下测试类:HibernateIDTest.java报错
org.hibernate.MappingException: Unknown entity: Teacher 很明显是找不到实体Teacher
HibernateIDTest.java代码如下:
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class HibernateIDTest
private static SessionFactory sessionFactory;
@BeforeClass
public static void beforeClass()
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
@AfterClass
public static void afterClass()
sessionFactory.close();
@Test
public void testTeacherSave()
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
public static void main(String[] args)
beforeClass();
不太懂junit junit锁定在session.save(t); 我知道用hbm.xml的话要在hibernate配置文件写清楚 但是我用的annotation 不用任何xml的配置啊 而且我导入的jar包也对啊 是javax.persistence的 完全不懂为什么出这种错误啊。。。有可能是junit自己的问题吗?
你在hibernate.cfg.xml中配置好Teacher实体的路径了?
<mapping class="你的Teacher所在的package.Teacher" /> 参考技术A 你在Hibernate.hbm.xml 配置没?
休眠 5 - java.lang.NoSuchMethodError: javax.persistence.Table.indexes()
【中文标题】休眠 5 - java.lang.NoSuchMethodError: javax.persistence.Table.indexes()【英文标题】:Hibernate 5 - java.lang.NoSuchMethodError: javax.persistence.Table.indexes() 【发布时间】:2018-11-07 11:37:00 【问题描述】:我正在尝试使用休眠注释测试一些 POJO,并且我不断地遇到相同的错误。我在另一个项目中使用了相同的配置,一切正常。我测试了测试 hib 对象时使用的 jdbc 连接 - 并且连接工作正常。
我发现了一些其他关于相同错误的问题,但没有任何帮助。
main方法测试类代码:
public static void main(String[] args)
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Item.class)
.buildSessionFactory();
//create session
Session session = factory.getCurrentSession();
try
session.beginTransaction();
List<Item> items = session.createQuery("from items").list();
带有休眠注解的 POJO:
@Entity
@Table(name="items")
public class Item
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="price")
private double price;
@Column(name="stock")
private int stock;
public Item()
public Item(String name, double price)
this.name = name;
this.price = price;
下面是每个实体的getter和setter。
文件 hibernate.cfg.xml 与另一个项目中的同一文件具有相同的配置,其中连接和休眠代码工作得非常好 - 正如上文所述,连接在单独的类中进行了测试。
我正在使用的 jars(全部添加到类路径中):
antlr-2.7.7.jar byte-buddy-1.8.0.jar 同学-1.3.0.jar dom4j-1.6.1.jar hibernate-commons-annotations-5.0.3.Final.jar hibernate-core-5.3.0.Final.jar hibernate-jpa-2.0-api-1.0.0.Final.jar jandex-2.0.3.Final.jar javassist-3.22.0-GA.jar javax.persistence-api-2.2.jar jboss-logging-3.3.2.Final.jar jboss-transaction-api_1.2_spec-1.0.1.Final.jar mysql-connector-java-8.0.11.jar我在标题中提到的错误提到了我的代码中的一行,这是第一个代码片段中发生 .buildSessionFactory() 的一行。
【问题讨论】:
NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index的可能重复 hibernate-jpa-2.0-api-1.0.0.Final.jar 添加到类路径中。问题中给出的可能重复的答案无助于解决此问题。 问题是在你的类路径中是否没有低版本的 jar 冲突。如果您使用的是 maven,请执行mvn dependency:tree
并检查重复项。
不使用 Maven。上面列出了所有使用的库。否则如何找到冲突的 jar 版本?
【参考方案1】:
您的类路径中有冲突的 jar:
hibernate-jpa-2.0-api-1.0.0.Final.jar
javax.persistence-api-2.2.jar
javax.persistence.Table.indexes 是 JPA 2.1 中添加的功能。
因此您应该丢弃 hibernate-jpa-2.0-api-1.0.0.Final.jar jar,因为它只描述 JPA 2.0 API。
当您有多个版本的相同类可供应用程序使用时,很难预测哪个版本会先加载,这就是为什么它有时会起作用的原因。但这基本上是一个彩票,所以你不应该在实践中这样做。
【讨论】:
【参考方案2】:我有这个错误是因为我们使用了树脂服务器并升级了休眠
树脂有 JPA 2.0
并且 Web 应用程序具有 hibernate-jpa-2.1-api-1.0.2.Final.jar
这就是Steve C
的回答中所述的冲突罐子的原因
要解决这种情况,您需要按照https://www.caucho.com/resin-4.0/admin/database.xtp#Hibernate 中的说明进行操作
在resin config文件中将新的api lib添加到resin classpath中
<server-default>
<jvm-classpath>path/to/lib/hibernate-jpa-2.1-api-1.0.2.Final.jar</jvm-classpath>
...
<server-default>
【讨论】:
以上是关于org.hibernate.MappingException: Unknown entity 使用annotation,javax.persisitence包的主要内容,如果未能解决你的问题,请参考以下文章