Java 如何将@UniqueConstraint与单表继承(JPA)结合使用?

Java 如何将@UniqueConstraint与单表继承(JPA)结合使用?,java,hibernate,jpa,unique-constraint,single-table-inheritance,Java,Hibernate,Jpa,Unique Constraint,Single Table Inheritance,我有一个使用单表策略(我不能更改)扩展现有实体的类。 我想对该实体使用UniqueConstraint,因此我尝试: @Entity @Table(name = "t_document") public class Document implements Serializable { ... } 及 根本不使用唯一约束,日志文件中没有任何内容。 在这种情况下,这是使用唯一约束的正确方法吗 (我们使用JPA2,JBoss 7.1)您不能重写基类@Table声明,这就是为什么子类uniqueCon

我有一个使用单表策略(我不能更改)扩展现有实体的类。 我想对该实体使用UniqueConstraint,因此我尝试:

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

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


(我们使用JPA2,JBoss 7.1)

您不能重写基类@Table声明,这就是为什么子类uniqueConstraints指令被忽略的原因

有了JPA你可以。因此,您需要在类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模式,您甚至可能不需要它。

如何生成类?
@UniqueConstraint
仅用于表的生成,表是通过Hibernate/JPA create创建的。表创建正确,仅缺少约束。
<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>