如何将@UniqueConstraint与单表继承(JPA)一起使用?

时间:2015-01-02 10:49:27

标签: java hibernate jpa unique-constraint single-table-inheritance

我有一个类使用单表策略扩展现有实体(我无法更改)。 我想对该实体使用UniqueConstraint,所以我尝试了:

@Entity
@Table(name = "t_document")
public class Document implements Serializable {
...
}

@Entity
@Table(uniqueConstraints = { @UniqueConstraint(name = "Test", columnNames = { ...  }) })
public class MyDocument extends Document {
...
}

根本不使用唯一约束,日志文件中没有任何内容。 这是在这种情况下使用UniqueConstraints的正确方法吗?

(我们使用JPA2,JBoss 7.1)

1 个答案:

答案 0 :(得分:2)

你不能覆盖基类@Table声明,这就是忽略子类uniqueConstraints指令的原因。

使用JPA,您可以override annotations with xml declarations。因此,您需要在class-pat中添加orm.xml文件并在其中添加唯一约束:

<entity-mappings 
  xmlns="http://java.sun.com/xml/ns/persistence/orm"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
  version="2.0">

    <package>...</package>
    <entity class="Document" access="PROPERTY" metadata-complete="false">
        <table name="document">
            <unique-constraint>
                <column-name>first_column</column-name>
                <column-name>second_column</column-name>
            </unique-constraint>
        </table>            
</entity-mappings>

这样您甚至可能不需要MyDocument子类,如果您只使用它来覆盖DDL架构。