JPA中@Table注解有什么用途?

18

使用这些注释的整个目的是独立于数据库提供程序,并且不需要重新生成JAR存档文件。

如果我硬编码@Table(name = myDatabase.myTableName),那么我就看不到使用Hibernate的意义。如果我决定切换到不同的数据库提供程序,则必须修改我的类中的@Table(name = myDatabase.myTableName)注释,并重新编译应用程序。


1
你所说的简单地反映了为什么许多人(包括我自己)不建议将特定于数据库的信息放入Java代码中,而是将其保留在XML中,这样一切都更加可移植。有些人喜欢将所有内容放在他们的Java文件中,使代码难以阅读 :-S,即个人偏好,因此如果您想要使用它,请使用,否则请使用XML,或者依赖JPA定义的默认值。 - Neil Stockton
谢谢Neil。我认为@Table注解有其用途。我将忽略那些教授如何在Java类中使用注解的在线教程。它们是误导性的。 - Emily
2
为什么你一开始会把 "myDatabase" 放在名称中,而不只是表名?如果假设你将来会切换数据库(虽然这不太可能),有什么阻止你在 Oracle、PostgreSQL 和 MySQL 中使用相同的表名呢? - JB Nizet
@NeilStockton 即使您对 XML 进行更改,也必须重新编译代码。在注释内部,您不编写任何逻辑,因此您在 XML 中所做的任何更改都需要在注释中完成。另外,如果您的表的 PK 是另一个表的 FK,则 XML 不支持此类映射,因此在这种情况下无法编写 Criteria,这实际上会增加对数据库的依赖性。 - damndemon
1个回答

19

@Table注释: @Table注释允许您指定用于将实体持久化到数据库中的表的详细信息。

@Table注释提供四个属性,允许您覆盖表的名称、目录和模式,并强制对表中列进行唯一约束。现在我们只使用表名EMPLOYEE。

@Entity
@Table(name = "EMPLOYEE")
public class Employee {
   @Id @GeneratedValue
   @Column(name = "id")
   private int id;
}

只需在此处添加表名,不需要在Java代码中提供数据库名称。http://docs.oracle.com/javaee/5/api/javax/persistence/Table.html


谢谢。但是我在哪里指定数据库名称(模式)?在您提供的链接中,它应该放在注释@Table(name="CUST", schema="RECORDS")中。 - Emily
1
架构通常在JDBC连接URL中指定,或者通过您用于连接到数据库的名称隐含指定。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接