我有一个枚举表,如:

城市

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);
}