无需外键即可休眠ManyToOne

Jas*_*son 2 hibernate

我正在寻找有关映射大型旧架构的一些建议。

这是情况。假设我们有一个名为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
}
Run Code Online (Sandbox Code Playgroud)

但是,BusinessTransaction表和User表之间没有外键。在SQL中,用户将通过部门密钥上的左外部联接连接到BusinessTransaction。

这些外键的创建将需要创建联接表。我们的DBA不愿创建外键或联接表,并且这样做的原因可以理解(影响批处理脚本,对应用程序可能产生的副作用等)。

我唯一的另一个想法是使用JoinFormula。但是,@ JoinFormula没有最好的文档,我的理解是数据将是只读的。

我是否忽略了任何有用的东西?

编辑:添加部门。

杰森

Dan*_*lor 5

无需创建外键或联接表即可在Hibernate中声明此表之间的关系。如果此类外键存在,Hibernate不会进行验证(只要您不要求数据库架构验证)。

但是请注意,您将需要在User表上使用适当的索引。索引也独立于外键,但是如果无法创建它们,则会导致性能严重下降。

但是您必须注意,如果没有创建任何外键,则如果User表中的键丢失,则可以预期Hibernate的行为不确定(错误)。外键用于确保数据库的一致性。