我正在寻找关于大型遗留架构映射的一些建议。
这是情况。假设我们有一个名为BusinessTransaction的类。该类有几个引用用户ID的字段:
@Entity
public class BusinessTransaction implements Serializable {
private Long id;
private User createdBy;
private User editedBy;
private User cancelledBy;
private String department;
// etc
}
public class User implements Serializable {
private Long id;
private String department;
//etc
}
但是,BusinessTransaction表和User表之间没有外键。在SQL中,用户将通过部门密钥上的左外连接连接到BusinessTransaction。
创建这些外键需要创建连接表。我们的DBA不愿意创建外键或连接表,并且这样做有可理解的原因(影响批处理脚本,可能对应用程序产生副作用等)。
我唯一的另一个想法是使用JoinFormula。但是,@ JoinFormula没有最好的文档,我的理解是数据是只读的。
我是否忽略了任何有用的东西?
编辑:增加了部门。
杰森
答案 0 :(得分:4)
为了在Hibernate中声明这些表之间的关系,不需要既不创建外键也不连接表。如果存在这样的外键,Hibernate不会验证(只要您不要求数据库模式验证)。
但是,请注意,您需要在User表上使用正确的索引。指数也独立于外键,但未能创建它们将导致性能急剧下降。
但是你必须注意,如果没有创建外键,如果缺少User表中的键,你可以期待Hibernate方面的不确定行为(错误)。外键用于确保数据库的一致性。