我有一个枚举表,如:
城市
id |名称
1 | BLR
2 | HTY
和Person表如:
人
id |名字| city_id
100 |西尔瓦| 1
200 | Tako | 1
300 | Uri | 2
其中city_id是City.id的外键引用 .
提供JPA映射的正确方法是什么,以便Person实体永远不能插入/删除/更新City实体,但只能更改city_id的值?我 Build 了一个没有级联的单向ManyToOne关系 . 唯一的问题是我需要在持久化Person之前查询并调用setCity . 有没有更好的办法 ?
Person.java
private Integer id;
private String name;
@ManyToOne
private City city;
/** Constructors, getters, setters - no knowledge of Person **/
City.java
@Entity
public class City {
private Integer id;
private String name;
/** Constructors, getters, setters - no knowledge of Person **/
}
App.java
private void persistPerson(Person person) {
// person is in detached to begin with
// get the managed city
City city = entityManager.find(City.class, person.getCity().getId());
// person now becomes a managed entity
Person managedPerson = entityManger.merge(person);
managedPerson.setCity(city);
}