【问题标题】:@OneToOne Or @ManyToOne?@OneToOne 还是 @ManyToOne?
【发布时间】:2021-04-22 18:04:09
【问题描述】:

有人可以确认我关注了吗?

我有以下实体:

public class Book {

.............


}


public class Student {

@OneToOne
Book favoriteBook
}

public class StudentOrderHistory{

Student student;

@OneToOne
Book lastBook;
}

如果 favoriteBook / lastBook 只链接到每一个 Student 或 StudentOrderHistory ,那么它仍然是一个@OneToOne 关系还是@ManyToOne 关系,因为同一个 BookEntity 在多个实体中链接(这里是 Student 和 StudentOrderHistory)?

如果同一本书是不同学生最喜欢的书,@ManyToOne 是否正确?

【问题讨论】:

    标签: database hibernate relation jdb


    【解决方案1】:

    我假设许多学生可能拥有相同的最爱书,这使其成为多对一:

    public class Student {
       @ManyToOne
       Book favoriteBook
    }
    

    这意味着两个不同的学生可以将同一本书作为他们的最爱。 示例:约翰和简最喜欢的书是《白鲸记》

    除非学生可以有多个订单历史记录,否则我会说这是一对一的:

    public class StudentOrderHistory{
    
        @OneToOne
        Student student;
    }
    

    因为每个学生的订单历史都是独一无二的。

    不确定lastBook。 如果这意味着一个学生拥有这本书,而其他人无法将其作为lastBook 拥有,那么它就是一对一的:

    public class StudentOrderHistory{
    
        @OneToOne
        Student student;
    
        @OneToOne
        Book lastBook;
    }
    

    这本书只属于这个StudentOrderHistory,因此属于一个学生。 如果您指的是他们订购的最后一本书,而与此同时,其他人订购了同一本书,那么它是多对一的:

    public class StudentOrderHistory{
    
        @OneToOne
        Student student;
    
        @ManyToOne
        Book lastBook;
    }
    

    似乎两个不同的学生可以订购同一本书,但在不了解更多信息的情况下很难说哪种解决方案是正确的。

    【讨论】:

    • 将遵循有效的规则:只要 ForeignKeyID 在 EntityTable 或关系中仅使用一次(例如 StudentHistory 和 StudentID),那么它始终是 @OneToOne
    • Hibernate ORM 描述包含关于不同映射的非常深入的解释,如果它可以提供帮助的话:docs.jboss.org/hibernate/orm/5.4/userguide/html_single/…
    猜你喜欢
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多