Entity not mapped 错误

在使用JPA和Hibernate时,可能会遇到'Entity not mapped'的错误。该错误通常由于实体类的映射问题引起。文章描述了作者在排查过程中发现实体类导入了Hibernate的包而不是JDK的标准包。解释了@javax.persistence.Entity和@org.hibernate.annotations.Entity的区别,后者是Hibernate3的扩展注解,用于提供额外的元数据功能。解决问题的方法是确保使用正确的@Entity注解。

   对于使用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即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值