gpt4 book ai didi

java - 我可以在 Hibernate table-per-hierarchy 继承策略中跨子类重用列吗?

转载 作者:行者123 更新时间:2023-11-30 06:38:07 24 4
gpt4 key购买 nike

在一个简单的继承树中,一个抽象父类(super class)有两个子类。

这两个子类都存储一个键值对,但一个将存储一个加密字符串类型,另一个将存储一个普通的旧字符串。

现在,我的问题是我可以这样做吗:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract Attribute {
@Id
private Integer id;

@Column(name="attribute_key")
private String key;
}

@Entity
public EncryptedAttribute extends Attribute {
@Column(name="attribute_value")
private EncryptedString encryptedValue;
}

@Entity
public UnEncryptedAttribute extends Attribute {
@Column(name="attribute_value")
private String plainValue;
}

加密字符串和普通字符串在数据库中都应该作为 varchars 结束,但是我可以在同一列中存储与不同子类关联的持久属性吗?这将避免在特定行中未使用的列中存储空值的“瑞士奶酪”副作用。

最佳答案

是的,你可以。 (在你的情况下我会这样做)

但是,您会遇到一些限制:这两个属性将具有相同的最大长度。

在子类之间共享这样的列更值得怀疑的地方是外键。假设你想让两个外键(每个子类一个)引用不同的表,如果你使用相同的列,你将无法设置外键约束。

另一方面,如果两个外键都是强制性的,但您选择使用两个不同的列以便拥有 fk 约束,则您将无法设置非空约束。

关于java - 我可以在 Hibernate table-per-hierarchy 继承策略中跨子类重用列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com