主类
CREATE TABLE TestTable
(
ID Int,
City Varchar(100),
CreateDate Datetime,
UpdateDate Datetime
);
ALTER TABLE TestTable
ADD CONSTRAINT [Constraint_CreateDate] DEFAULT (GETDATE()) FOR [CreateDate];
INSERT INTO TestTable (ID, City)
VALUES (1, 'DC');
UPDATE TestTable
SET City = 'NY'
WHERE ID = 1; -- How to populate the UpdateDate when this update happen.
类扩展
@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 {
有人遇到过这种情况吗?
答案 0 :(得分:0)
问题是你正在使用
@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 文档。