Hibernate的SchemaExport上没有强制实施唯一约束

时间:2011-01-03 07:38:14

标签: java hibernate orm

我不确定为什么我的实体类不会创建我需要的表模式

@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的参考手册,它确实支持列上的Unique约束。我尝试在类上添加uniqueconstraint注释,但结果是一样的。

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

问题是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;
    }
}
相关问题