Java 为什么在配置文件中定义类时需要@Entity注释
我刚开始冬眠。我阅读了一些教程,发现如果要在hibernate配置文件中添加模型类,仍然需要在模型类中添加Java 为什么在配置文件中定义类时需要@Entity注释,java,hibernate,Java,Hibernate,我刚开始冬眠。我阅读了一些教程,发现如果要在hibernate配置文件中添加模型类,仍然需要在模型类中添加@Entity注释 为什么会这样?我会引用相关文档 2.2.1。将POJO标记为持久实体 每个持久化POJO类都是一个实体,并使用 @实体注释(在类级别): @实体公共类飞行实现可序列化{ 长id @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @
@Entity
注释
为什么会这样?我会引用相关文档 2.2.1。将POJO标记为持久实体 每个持久化POJO类都是一个实体,并使用 @实体注释(在类级别): @实体公共类飞行实现可序列化{ 长id
@Id
public Long getId() { return id; }
public void setId(Long id) { this.id = id; } }
@实体将类声明为实体(即持久POJO
类),@Id声明此实体的标识符属性。另一个
映射声明是隐式的
航班表,使用列id作为其主键列。注意
异常配置的概念是JPA的核心
规格
根据是注释字段还是注释方法,访问类型
Hibernate将使用字段或属性。EJB3规范要求
在将要创建的元素类型上声明注释
已访问,即getter方法如果使用属性访问,则字段
如果使用字段访问,则在字段和方法中混合注释
应避免。Hibernate将从
@Id或@EmbeddedId的位置
有一种叫做JPA的东西,也称为Java持久性API。
Hibernate在其实现中遵循这些准则。
因此,要确保JVM正确识别它(以及将其映射为实体)
JPA将在持久性管理设置中包括任何用@Entity注释的类。如果使用注释,则不需要persistence.xml。这在其他JPA实现中也适用,如Open JPA
作为Java的经验法则。J2EE以接口、注释和各种其他方式提供指导。当有人开发J2EE的API实现时,他们遵循这些指令。这是标准化的方式。
@Entity
是JPA注释。来自,第2.1节:
实体类必须使用实体注释或
在XML描述符中表示为实体
因此,如果您使用注释进行映射,@Entity
是规范要求的,Hibernate必须遵守它
JPA设计人员是否可以将其设置为可选的?可能是的,但始终将其添加到实体类中以显式指定一个类是实体,这样就可以让未来的代码读者更容易地立即看到该类的用途。实际上,您根本不需要注释。Hibernate允许其
.xml
配置为单个配置源。但是如果您选择使用注释,显然您需要在模型类中使用@Entity
基本上,你只需要告诉Hibernate你的模型类是什么,它们是如何映射到数据库表的,你可以通过
.xml
configs或JPA注释来实现。此外,你甚至可以在一个应用程序中混合使用这两种方法,没有什么可以禁止的。Hibernate将扫描用@实体注释的任何Java对象的包。如果找到任何,它将开始查看该特定Java对象的过程,以将其重新创建为数据库中的表
它通过扫描配置文件中指定的特定包(通过sessionFactory.setPackagesToScan()工作)反之亦然。如果使用注释,则不需要向持久性xml中添加实体。因此,为了确保JVM正确识别它-听起来很奇怪:)也许您可以更正它。我的理解是,任何注释都是JVM或编译器的元数据。注释只是类的附加属性。JVM或编译器do与之无关。您需要编写代码来获取类的注释(就像Hibernate一样)并检查其名称:)尝试开发您自己的注释(非常简单),您将看到。