【问题标题】:Problem with @UniqueConstraint with extends带有扩展的@UniqueConstraint 问题
【发布时间】:2021-04-18 01:26:34
【问题描述】:

主类

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"codigoEAN", "tipo"})})
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo")
@DiscriminatorValue("Produto")
public class Produto {

类扩展

@Entity
@DiscriminatorValue("Caixa")
public class ProdutosEmCaixa extends Produto {

我想要什么?

  1. 当它是 produto 类型“Produto”时,它不会重复键(codigoEAN,tipo),但当它是“Caixa”类型时,它可以重复键。

类似

// That does not exist
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"codigoEAN", "tipo=Produto"})})

有没有人经历过这种情况?

【问题讨论】:

标签: java jpa annotations


【解决方案1】:

问题是你正在使用

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

这意味着两个实体将映射到一个表中(使用鉴别器列)。您不能定义仅适用于特定行的唯一约束。

如果约束只对某种实体有意义,则必须将它们映射到单独的表中。

InheritanceType.TABLE_PER_CLASS:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Produto {
...
   @Column(name="codigoEAN")
   private String codigoEAN;
}

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"codigoEAN"})})
public class ProdutosEmCaixa extends Produto {
 ...
}

InheritanceType.JOINED:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "tipo")
@DiscriminatorValue("Produto")
public class Produto {
...

}

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"codigoEAN"})})
@DiscriminatorValue("Caixa")
public class ProdutosEmCaixa extends Produto {
 ...
   @Column(name="codigoEAN")
   private String codigoEAN;
}

有关mapping inheritance 的更多详细信息,请参阅 Hibernate ORM 文档。

【讨论】:

    猜你喜欢
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2011-06-28
    • 2011-07-25
    • 2017-10-13
    相关资源
    最近更新 更多