@Entity
public class Language {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(length = 2)
private String code; //EN, DE, US
public Language(String code) {
this.code = code;
}
}
@Entity
public class ProductText {
@OneToOne(Cascade.ALL)
private Language lang;
}
ProductText text = new ProductText();
text.setLang(new Language("en")); //what if "en" exists?
dao.save(text);
现在,当我保留 ProductText
时,每次都会生成一个新的 Language
对象。
我可以阻止这种情况吗?如果存在 code = 'en'
的语言表条目,则应链接此现有实体。
我最初的目标是不必在产品文本表中多次重复countryCodeString“EN”,而只需引用ID。但这真的有意义吗?我应该只使用简单的 String
而不使用额外的表吗? (我稍后想要查询 ProductTexts 列表 其中 lang = 'de'
)。
唯一的改变是之前执行像 dao.findByLang("en")
这样的选择吗?
或者是否还有一些 hibernate 功能可以支持此功能,而无需自己显式执行查询?
最佳答案
对“en”值进行进一步处理还是直接显示?如果仅用于显示目的,我将只存储字符串,但如果您想通过使用外键 ID 来减少冗余,您必须创建一个包含语言字符串的实体en
可以通过实体管理器进行持久化,并且在持久化以重用它之前,您必须从实体管理器中获取它。
关于java - 如果实体已经存在,如何通过属性返回实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051509/