使用spring数据保存嵌套对象 - 使用id作为引用

时间:2018-03-27 15:11:11

标签: java jpa spring-data-jpa

假设您正在创建类型为User的新实体,用户拥有嵌套对象Billing,因为您知道存在ID为1的Billing,是否有一个简单的您可以通过哪种方式在新User和现有Billing之间建立关联?

假设提取Billing对象设置为用户是一项昂贵的操作,因此无法选择获取整个Billing对象并将其设置给用户的解决方案。

我的问题是,是否有一种使用弹簧数据在实体与其嵌套对应物之间保存此关系的简便方法?

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int userId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "billing_id")
    private Billing userBill;

    // constructor
    // getters and setters

}

例如在sudo代码中:

User bob = new User();
bob.billingId.id = 1;

userRepository.save(bob);

1 个答案:

答案 0 :(得分:3)

绝对。

JpaRepository.getOne(id)(与CrudRepository.findById相对)将在内部调用EntityManager.getReference(entityType, id),这是指定处理此确切用例的方法(获取对实体的引用,而不加载其关联州)。

要回答您的问题,您需要的是:customer.setBilling(billingRepository.getOne(billingId))