我是Hibernate的新手。我正在阅读一些教程,我发现如果我们在hibernate配置文件中添加模型类,我们仍然需要在模型类中添加@Entity
注释。
为什么会这样?
答案 0 :(得分:3)
@Entity
是JPA注释。来自JPA specification,第2.1节:
实体类必须使用Entity注释或注释 在XML描述符中表示为实体。
因此,如果您使用注释进行映射,则@Entity
是规范要求的,Hibernate必须遵守它。
JPA设计师可以选择吗?可能是的,但实际上并不花费太多精力总是将它添加到实体类中以明确指定类是一个实体,从而使代码的未来读者更容易立即看到类的目的。
答案 1 :(得分:1)
我会引用此文档
2.2.1。将POJO标记为持久实体
每个持久性POJO类都是一个实体,并使用 @Entity注释(在类级别):
@Entity public class Flight implements Serializable { 很长的身份;
@Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
@Entity将该类声明为实体(即持久性POJO) class),@ Id声明该实体的identifier属性。另一个 映射声明是隐式的。 Flight类映射到 航班表,使用列id作为其主键列。注意
异常配置的概念是JPA的核心 说明书
取决于您是否注释字段或方法,访问类型 Hibernate使用的将是字段或属性。 EJB3规范要求 你在元素类型上声明注释 访问,即使用属性访问的getter方法,即字段 如果您使用现场访问。在两个字段和方法中混合注释 应该避免。 Hibernate将从中猜测访问类型 @Id或@EmbeddedId的位置。
有一种叫做JPA aka Java Persistence API的东西。 Hibernate遵循其实现中的指导原则。 因此,要确保它由JVM正确识别(以及映射为实体)
JPA将在持久性管理设置中包含任何使用@Entity注释的类。如果使用注释,则不需要persistence.xml。这在其他JPA实现中也是如此,如Open-JPA
作为Java的拇指规则。 J2EE以接口和注释以及各种其他方式提供指南。当有人开发J2EE的API实现时,他们遵循这些指令。这是标准化的方式。
答案 2 :(得分:1)
实际上你根本不需要注释。 Hibernate允许其router.get('/', function(req, res) {
userModel.find().exec(function(err, userDocs) {
if (err) {
console.log(err);
return res.status(400).json(err)
}
return res.render('users', {
users: {
length: _.toArray(userDocs).length,
users: tournamentDocs
}
});
});
});
});
配置成为单一配置源。但是如果你选择使用注释 - 显然你的模型类需要.xml
。
基本上,你只需要告诉Hibernate你的模型类是什么以及它们如何映射到数据库表,你可以通过@Entity
配置或通过JPA注释来实现。此外,您甚至可以在单个应用程序中混合使用这两种方法,并且没有任何禁止这一点的方法。
答案 3 :(得分:0)
Hibernate将扫描该程序包以查找带有 @Entity 批注的所有Java对象。如果找到任何东西,它将开始浏览该特定Java对象以将其重新创建为数据库中的表的过程!
通过扫描您在配置文件中指定的特定程序包(通过sessionFactory.setPackagesToScan())来工作