在多对一关系的多边创建实体实例
Create instance of the Entity in the Many side of ManyToOne Relationship
我正在使用 Spring 数据 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(?);
但是在创建时我将只有 owner_id。
我想在创建时单独设置 owner_id,但要有关联(在查询时),我已将其映射到具体的 class(Person)。
我试过了
class Contact{
@Column("owner_id")
private String ownerId;
@ManyToOne
@JoinColumn("owner_id")
private Person pwner;
}
但它抛出错误重复引用 owner_id。
我不想使用 owner_id 查询人员 Table 并在创建联系人时设置 "Person" 引用。
我想在插入和所有者参考时使用 owner_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)
.
我正在使用 Spring 数据 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(?);
但是在创建时我将只有 owner_id。
我想在创建时单独设置 owner_id,但要有关联(在查询时),我已将其映射到具体的 class(Person)。
我试过了
class Contact{
@Column("owner_id")
private String ownerId;
@ManyToOne
@JoinColumn("owner_id")
private Person pwner;
}
但它抛出错误重复引用 owner_id。
我不想使用 owner_id 查询人员 Table 并在创建联系人时设置 "Person" 引用。
我想在插入和所有者参考时使用 owner_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)
.