欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Entity not mapped 错误

程序员文章站 2022-04-11 17:46:18
...

   对于使用jpa、hibernate这两个框架来说,可能经常一不注意,就会出现这个问题。最近突然遇到这个问题,感觉挺好玩,就记录下来。
  一般出现报错, 肯定是先看控制台或者日志,看看有什么错误信息,然后就发现了这个entity not map的错误,一开始是以为实体类的某个字段与数据库映射错误或者@Table(name=“xxx”)中的表名和数据库中没有对应,然后经过仔细检查,发现好像没有一点问题。
   感觉很奇怪,然后检查注解,@Entity @Table也都加了,突然看见了好像导入的@Entity这个的包有点奇怪,再仔细一看 导入的包是:import org.hibernate.annotations.Entity;居然呢导入的是 Hibernate中的包。
查看其他实体类,使用的是import javax.persistence.Entity; 使用的是javax中的包。然后重新导包,运行,就可以了。

   Hibernate为什么会有这样一个包,并且也是Entity,缺不能映射实体类呢? 经过查询资料(百度),查到了hibernate和javax中的@Entity的却别:
@javax.persistence.Entity 是 jdk 的标准,Hibernate用来映射实体类
而@org.hibernate.annotations.Entity 的@Entity注解是Hibernate3扩展的注解,用来增加一些扩展功能: 例如动态sql、乐观锁、定义元数据等:
(1)使用方法:实体类加 两个@Entity即可。

@Entity
@org.hibernate.annotations.Entity

// 例如
@Entity
@org.hibernate.annotations.Entity(optimisticLock=OptimisticLockType.ALL)
public class TableEntity implements Serializable {
...
}

(2)作用:
追加了可能需要的额外的元数据,而这些元数据超出了标准@Entity 中所定义的元数据。
mutable: 此实体是否为可变的
dynamicInsert: 用动态SQL新增
dynamicUpdate: 用动态SQL更新
selectBeforeUpdate: 指明Hibernate从不运行SQL UPDATE除非能确定对象的确已被修改
polymorphism: (指出)实体多态是PolymorphismType.IMPLICIT(默认)还是PolymorphismType.EXPLICIT
optimisticLock: 乐观锁策略(OptimisticLockType.VERSION, OptimisticLockType.NONE, OptimisticLockType.DIRTY 或 OptimisticLockType.ALL)

所以,如果不使用扩展功能等,只需要实体映射,使用@javax.persistence.Entity即可。