java - 插入具有关系的 Hibernate 实体

标签 java hibernate orm relational-database entity-relationship

假设我有这些类(class):

public class Loan {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "lender_id")
    private User lender;
}

public class User {

    @Id
    private Long id;

    @Column
    private String userName;

    @OneToMany
    private List<Loan> loans;
}

现在,假设我有用户(贷方)ID,并且在 DAO 层中,我想根据贷方的 id 创建一个 Loan

我意识到我可以执行以下操作:

User u = userDao.getUserById(1234L);
loanDao.createLoan(u, "someLoan");

但我想知道是否可以在不预加载用户记录的情况下完成此操作?

最佳答案

没有一个好的方法可以做到这一点,部分原因是它从根本上会导致错误的 ORM 代码。作为程序员,您负责管理实体的内存状态并保持它们正确。如果您创建一个新的贷款并说它属于一个用户,并且一个用户有一个贷款集合,那么您有责任将该贷款添加到该用户! (一旦涉及到缓存,就会产生真正的后果。)

您正在使用 ORM,您需要根据对象而不是数据库来思考。在外键列中添加数字并不重要,设置对象模型的正确内存中表示对您来说才是重要的。数据库是hibernate的问题。

关于java - 插入具有关系的 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476890/

相关文章:

java - Spring - 通过 RMI 传递监听器

java - gson.toGson() 不调用自定义序列化方法

java - Spring , hibernate : Invalid UTF-8 start byte 0x80 error when trying to save images

symfony - Doctrine 复合主键外键

java - 如何使用 Select 子句中的构造函数为多个表的选定列编写 HQL JOIN 查询

java - 从 JPA 实体逆向工程 DDL

java - 在 zip 中写入(修改或添加)文件

JavaFX Builder 1.0 无法打开文件

java - 使用 QueryDSL,如何在子项匹配所有条件的集合上创建表达式?

java - 无法将数据库状态与 hibernate 中的 session 异常同步