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

Mar*_*ada 2 java orm hibernate

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

@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
}
Run Code Online (Sandbox Code Playgroud)

当我使用Schema导出时.

new SchemaExport(config).create(true, true);
Run Code Online (Sandbox Code Playgroud)

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

drop table User
create table User (id bigint generated by default as identity, login_name varchar(255)primary key (id))
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

jpk*_*ing 7

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

@Column(name = "login_name", unique = true, nullable=false)
Run Code Online (Sandbox Code Playgroud)

要么

import org.hibernate.dialect.DerbyDialect;

public class CustomDerbyDialect extends DerbyDialect {
    public boolean supportsNotNullUnique() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)