如何在单表继承(JPA)中使用@UniqueConstraint? [英] How to use @UniqueConstraint with single table inheritance (JPA)?

查看:604
本文介绍了如何在单表继承(JPA)中使用@UniqueConstraint?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类使用单个表策略扩展现有的实体(我不能改变)。
我想为该实体使用UniqueConstraint,所以我试过:

  @Entity 
@Table(name =t_document)
public class Document实现Serializable {
...
}



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

唯一的约束完全不用,日志文件中什么也不用。
这是在这种情况下使用UniqueConstraints的正确方法吗?

(我们使用JPA2,JBoss 7.1)



解决方案

使用JPA,您可以使用xml声明覆盖注释。所以你需要在你的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 =Documentaccess =PROPERTYmetadata-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模式。


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.

这篇关于如何在单表继承(JPA)中使用@UniqueConstraint?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆