I have a class extending an existing entity with single table strategy (which I can't change). I want to use UniqueConstraint for that entity so I tried:
@Entity
@Table(name = "t_document")
public class Document implements Serializable {
...
}
and
@Entity
@Table(uniqueConstraints = { @UniqueConstraint(name = "Test", columnNames = { ... }) })
public class MyDocument extends Document {
...
}
The unique constraint is not used at all, nothing in log file. Is this the correct way to use UniqueConstraints in this situation?
(We use JPA2, JBoss 7.1)
You cannot override the base class @Table declaration, that's why the sub-class uniqueConstraints directive is ignored.
With JPA you can override annotations with xml declarations. So you need to add an orm.xml file in your class-pat and add the unique constraints there:
<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>
This way you might not even need the MyDocument sub-class, if you only used it to override the DDL schema.
来源:https://stackoverflow.com/questions/27740929/how-to-use-uniqueconstraint-with-single-table-inheritance-jpa