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表中插入一个新的国家。
谢谢!
答案 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);