【问题标题】:Unique Constraint Not Enforce on SchemaExport of Hibernate唯一约束未对 Hibernate 的 SchemaExport 强制执行
【发布时间】:2011-01-03 07:38:14
【问题描述】:

我很不确定为什么我的实体类没有创建我所需的表架构

@Entity
@Table(name = "User")
public class User implements Serializable {
    private Long id;
    private String loginName;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    @Column(name = "login_name", unique = true)
    public String getLoginName() {
        return loginName;
    }
    //other setters
}

当我使用 Schema 导出时。

new SchemaExport(config).create(true, true);

它会创建此 SQL,但不会向我的 login_name 字段添加任何唯一约束。

drop table User
create table User (id bigint generated by default as identity, login_name varchar(255)primary key (id))

我正在使用 Apache Derby,并且我查看了 Derby 的参考手册,它确实支持列上的唯一约束。我尝试在类上添加一个 uniqueconstraint 注释,但结果是一样的。

有什么想法吗?

【问题讨论】:

  • 这就是所有的 SQL?根据我的经验,通常会有一个 ALTER TABLE 语句来添加 UNIQUE 约束...

标签: java hibernate orm


【解决方案1】:

问题在于 Derby 扩展了 DB2 Dialect,它将“supportsNotNullUnique”指定为“false”。因此,解决方案是创建您的自定义 Derby 方言并更改此方法以返回“true”,或者将您的字段标记为 nullable=false。

@Column(name = "login_name", unique = true, nullable=false)

import org.hibernate.dialect.DerbyDialect;

public class CustomDerbyDialect extends DerbyDialect {
    public boolean supportsNotNullUnique() {
        return true;
    }
}

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多