【问题标题】:Hibernate - Constraint NameHibernate - 约束名称
【发布时间】:2015-11-16 13:58:15
【问题描述】:

有人知道如何设置主键的约束名称(PK_[name]),检查(CK_[Name]),默认[DF_[Name]],外键(Fk_[Name]),唯一.. 例如,通过使用注释或 xml 配置,我想要那个表 ::::

CREATE TABLE ACCOUNT (
[ID] INT NOT NULL IDENTITY(1,1),
[USERNAME] VARCHAR(50) NOT NULL,
[PASSWORD] VARCHAR(50) NOT NULL,
[EMAIL] VARCHAR(100) NOT NULL,
[GENDER] INT NOT NULL ,
[ADDRESS] INT,
[AGE] INT CONSTRAINT DF_tblAccount_Age DEFAULT 0,
CONSTRAINT PK_tblAccount_ID PRIMARY KEY([ID]),
CONSTRAINT UQ_tblAccount_Address UNIQUE(ADDRESS),
CONSTRAINT FK_tblAccount_Gender FOREIGN KEY([GENDER]) REFERENCES GENDER([ID]),
CONSTRAINT FK_tblAccount_Address FOREIGN KEY([ADDRESS]) REFERENCES ADDRESS([ID]) ON DELETE SET NULL,
CONSTRAINT CK_tblAccount_Age CHECK ([AGE] > 0 AND [AGE] <100)
)

翻译成注解类或者 [name].hbm.xml , Hibernate 是否支持使用约束名称或者我必须更改表 每次我创建一个新类... 我搜索并找到了 0 个关于约束名称的结果!

注解类示例 :::

@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
// -->>Add Primary Key constraint Name Here !! ???
private int id;

@Column(name="Name")
private String name;

@Column(name="Surname")
private String surname;

@Column(name="age")
// -->>Add Check constraint Name Here !! ???
private String age;

@OneToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@OnDelete(action=OnDeleteAction.CASCADE)
@JoinColumn(name="Address" , referencedColumnName="id",nullable=false)
// -->>Add Foreign Key constraint Name Here !! ???
private Address address;

【问题讨论】:

    标签: java sql hibernate jpa orm


    【解决方案1】:

    在 JPA 中,您可以在类级别执行此操作,使用 @Table 注释属性,您可以在其中指定约束名称。对于映射到列id的主键id

    @Table(uniqueConstraints = @UniqueConstraint(columnNames = "ID", name = "PERSONS_PK_CONSTRAINT"))
    

    【讨论】:

    • 这对我来说不适用于休眠 5.4 和 Oracle DB (Oracle12cDialect)。 @UniqueConstraint 仅适用于不属于 PK 的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2016-08-14
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多