如何将 @UniqueConstraint 与单个 table 继承(JPA)一起使用?
How to use @UniqueConstraint with single table inheritance (JPA)?
我有一个 class 使用单个 table 策略扩展现有实体(我无法更改)。
我想对该实体使用 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)
您不能覆盖基本的 class @Table 声明,这就是忽略 sub-class 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 子class,如果你只是用它来覆盖 DDL 模式。
我有一个 class 使用单个 table 策略扩展现有实体(我无法更改)。 我想对该实体使用 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)
您不能覆盖基本的 class @Table 声明,这就是忽略 sub-class 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 子class,如果你只是用它来覆盖 DDL 模式。