在许多人关系的许多方面创建实体实例



我正在使用春季数据JPA
我有以下实体

实体

class Person{
private String id;
@OneToMany(mappedBy="owner")
private List<Contact> contacts;
...
}

联系人实体

class Contact{
private String id;
@ManyToOne
@JoinColumn(name="owner_id")
private Person owner;
...
}

当我想创建联系实例时,我对如何映射所有者详细信息感到困惑。

Contact contact = new Contact();
contact.setOwner(?);

但是,在创建时我只有所有者。
我想在创建时单独设置所有者_id,但是要建立关联(查询),我将其映射到具体类(人)。

我尝试了这个

class Contact{
@Column("owner_id")
private String ownerId;
@ManyToOne
@JoinColumn("owner_id")
private Person pwner;
} 

但是,它的投掷错误重复引用了所有者。

我不想在创建联系时查询所有人的表格,并将"人"引用设置为设置。

我想在插入和所有者参考时使用所有者_ID,我可能会获得所有者详细信息以提供给予联系人。如何解决此问题。

预先感谢。

您需要用户。该用户在数据库中。JPA允许将数据库表映射到实体。您拥有此用户的ID。所以...只需使用JPA API获取用户:

contact.setOwner(entityManager.find(User.class, userId));

contact.setOwner(entityManager.getReference(User.class, userId));

第一个实际上从数据库中获取用户的详细信息,因此检查了用户的确存在。

第二个假设用户存在,ANS只是创建了一个懒惰的初始化代理,而无需查询数据库。

class Person {
   private String id;
   @OneToMany(mappedBy="owner")
   private List<Contact> contacts;
}
class Contact {
   private String id;
   @ManyToOne(fetch = FetchType.Lazy)
   @JoinColumn(name="owner_id", nullable=false,updatable=false)
   private Person owner;
   @Column("owner_id")
   private String ownerId;
}

这实际上允许我在创建联系对象时使用ownerId:String字段,并且owner:Owner对象可以帮助我获取给定联系方式的所有者详细信息(如果需要的话)。这种方法我可以在不使用findOne(id)getOne(id)的情况下达到要求。

最新更新