【问题标题】:Create user table name with hibernate使用休眠创建用户表名
【发布时间】:2013-08-15 03:40:55
【问题描述】:

我想在 MS SQL 中使用 hibernate 创建一个对象,该表的名称是“user”。这是行不通的!。 我认为这个问题可能是由表/实体的名称引起的,用户是关键字。 我应该怎么做才能拥有名为“user”的表?

@Entity
@Table(name = "user")
public class User  {

【问题讨论】:

  • 调用表Users,因为它要存储一组用户,另外这不会和保留字冲突?我知道在实体模型中事物是用户,但您需要在应用程序和架构之间划一条线。
  • @Reimeus 那是因为您正在查看 MySQL 文档。问题是关于 SQL Server 的。 Try here.

标签: java sql-server hibernate


【解决方案1】:

用方括号将表名括起来:

@Entity
@Table(name = "[user]")
public class User  {

这样 Hibernate 在创建表时会对其进行转义。如果按照规则将所有字段和表名放在方括号中,则在设置映射时无需考虑底层 DBMS。

你必须这样做总是困扰着我。 Hibernate 的主要目标之一是将您的代码与底层数据库隔离——我不明白为什么方言实现不能正确处理转义保留关键字。

另请参阅:Using database reserved keywords in Hibernate

【讨论】:

    【解决方案2】:

    我应该使用重音 (`)。为了在休眠中使用关键字,我们必须在关键字周围使用(`)。

    @Entity
    @Table(name = "`user`")
    public class CompanyUser extends
    

    【讨论】:

    • 它不适用于 oracle,线程“main”中的异常 org.hibernate.exception.SQLGrammarException: 无法执行 JDBC 批量更新
    • 在 Oracle 和 JPA 2.0 中,它适用于双 qout。例如:@Table(name="\"user\"")
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多