Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在配置文件中定义类时需要@Entity注释_Java_Hibernate - Fatal编程技术网

Java 为什么在配置文件中定义类时需要@Entity注释

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; } } @

我刚开始冬眠。我阅读了一些教程,发现如果要在hibernate配置文件中添加模型类,仍然需要在模型类中添加
@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一样)并检查其名称:)尝试开发您自己的注释(非常简单),您将看到。