我不确定为什么我的实体类不会创建我需要的表模式
@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注释,但结果是一样的。
有什么想法吗?
答案 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;
}
}