@OneToOne 还是 @ManyToOne?

问题描述

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

我有以下实体:

public static void createSheet() throws IOException {
        String title =  LocalDateTime.Now().toString() ;
        Spreadsheet spreadsheet = new Spreadsheet()
                .setProperties(new SpreadsheetProperties()
                        .setTitle(title));
        spreadsheet = service.spreadsheets().create(spreadsheet)
                .setFields("spreadsheetId")
                .execute();
        spreadsheetId = spreadsheet.getSpreadsheetId();
        System.out.println("Spreadsheet ID: " + spreadsheet.getSpreadsheetId());
    }

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

@ManyToOne 是否会更多,例如同一本书是不同学生最喜欢的书?

解决方法

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

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;
}

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...