【发布时间】:2010-12-10 02:02:26
【问题描述】:
我们使用注解将实体类映射到数据库表,只需指定@Entity 和更多类似@Id、表连接和许多东西。我不知道这些实体变量是如何与数据库表映射的。谁能给个简短的描述以便理解。
谢谢:)
【问题讨论】:
标签: java hibernate jpa annotations
我们使用注解将实体类映射到数据库表,只需指定@Entity 和更多类似@Id、表连接和许多东西。我不知道这些实体变量是如何与数据库表映射的。谁能给个简短的描述以便理解。
谢谢:)
【问题讨论】:
标签: java hibernate jpa annotations
这个想法是将您的对象及其与其他对象的连接转换为关系数据库。这两种表示数据的方式(由类和数据库中的表定义的对象)不直接兼容,这就是所谓的Object Relational Mapper 框架发挥作用的地方。 所以像
这样的类class MyObject
{
private String name;
private int age;
private String password;
// Getters and setters
}
将转换为包含 varchar 类型的列名、int 类型的年龄和 varchar 类型的密码的数据库表。
Java 中的注解只是将附加信息(所谓的元数据)添加到您的类定义中,任何其他类(例如 JavaDoc)都可以读取这些信息,并且在 Java Persistence API 的情况下,将由 ORM 框架使用,例如休眠以读取将对象转换为数据库所需的其他信息(您的数据库表需要主 ID 和一些信息 - 例如对象与另一个对象的关系类型 - 不能仅通过查看您的类来自动确定定义)。
【讨论】:
注解只是类的元数据,没什么神奇的。您可以编写自己的注释。这些注释被赋予运行时的保留策略(这意味着您可以在运行时访问该元数据)。当您调用persist 等时,持久性提供程序会遍历您类中的字段(java.lang.reflect.Field)并检查存在哪些注释来构建您的SQL 语句。尝试编写自己的注释并用它做一些事情。在那之后它似乎不会很神奇。
【讨论】:
在您的情况下,注释工作意味着表名与实体类的映射看起来像 ....
@Entity
@Table(name = "CompanyUser")
public class CompanyUserCAB implements java.io.Serializable
{
private long companyUserID;
private int companyID;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "companyUserID")
public long getCompanyUserID()
{
return this.companyUserID;
}
public void setCompanyUserID(long companyUserID)
{
this.companyUserID = companyUserID;
}
@Column(name = "companyID")
public int getCompanyID()
{
return this.companyID;
}
public void setCompanyID(int companyID)
{
this.companyID = companyID;
}
}
【讨论】: