在ManyToMany / ManyToOne关系(JPA)

时间:2016-06-25 17:07:09

标签: java mysql hibernate jpa

JPA和Hibernate用于检索和保留实体。有一个User表,它包含一个Country,在另一个表中表示。

我想在User表中插入一个新用户。此新用户来自已插入Country表中的国家/地区。要为新用户分配现有国家/地区,我可以从数据库中检索国家/地区对象并将其设置为User对象 - 它按预期工作,在用户和现有国家/地区之间创建关系,不插入新行到Country表。

是否可以在不从数据库中检索Country对象的情况下获得相同的行为,仅基于我在Java中为JPA实体中的Country对象设置的值?

例如:

User user = new User("test user");
user.setCountry(new Country("USA"));
entityManager.persist(user);

我希望JPA / Hibernate能够自动检查数据库中是否存在国家,哪个代码是USA(代码保存在Country表中的列中,并且它是唯一的)。如果是 - 使用现有的Country对象,以便不创建数据库中的新条目,如果它不存在 - 在Country表中插入一个新的国家。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你可以从用户实体创建2个与国家相关的映射。

@Column
private String country_code;

@ManyToOne
@JoinColumn
私人国家;

在保存新数据之前,您只需要设置country_code而不是实体,保存后可以执行entityManager.refresh(用户),它会为您加载@ManyToOne字段

所以我猜是

<code>User user = new User("test user");
user.setCountry_code("USA");
entityManager.persist(user);
entityManager.refresh(user);
相关问题