【发布时间】:2011-03-18 11:57:15
【问题描述】:
我有一个 Java 实体,我希望 Hibernate 从整数字段创建外键(因为我没有对象引用):
@Entity
public class Invoice {
...
@Column(nullable = true)
private Integer generatedBy;
...
我想我想用一个属性做这样的事情:
@ForeignKey(name="FK_Invoice_GeneratedBy", references="UserTable.UserId")
@Column(nullable = true)
private Integer generatedBy;
实现这一目标的最佳方法是什么?我最好不必在单独的文件中维护这些关系(如果可能的话)。
【问题讨论】:
-
只是一个问题:你没有参考用户的原因是什么?
-
可能有多种原因。例如 1)性能原因(我不想“吸收”太多信息)或 2)它是数据库中的一个表,它没有由我系统中的实体表示(或者我无法控制它)......但对我来说,它主要是nr。 1
-
1.) 延迟加载 2.) 如果没有实体表示,为什么需要 hibernate 知道外键约束?
-
1) 延迟加载使其更慢。问题是我需要通过 Web 服务边界返回这些实体,这会导致整个对象层次结构具体化。这导致了严重的性能问题。 2)我想保持数据库的完整性,我真的不需要它来用于 Hibernate,但确实发现它是存储它靠近类/字段定义的最佳位置。
-
1) 好吧,如果您通过 Web 服务传输实体,我强烈建议您使用数据传输对象模式,并且延迟加载不再是问题(即使您传输分离的实体,您不需要初始化所有未加载的关联,访问它们将“只是”导致异常)。 2)可以直接在数据库中声明外键约束。我也不建议依靠 Hibernate 来维护数据库结构。如果只是给程序员的信息,请添加评论。
标签: java hibernate foreign-keys