持久化新对象而不必获取关联

Bil*_*ory 2 java orm hibernate jpa

我在广告实体中有以下映射:

class Ad ... {
@Id
    @Column(name = "id", unique = true, nullable = false)   
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_ad_generator")      
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_id", nullable = false)
    private Category category;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "city_id", nullable = false)
    private City city;
Run Code Online (Sandbox Code Playgroud)

在某些时候,我想坚持一个新的广告...但我只知道类别和城市的PK id值(因为实体转换为DTO,发送到存储id的前端,然后DTO是发送到后端的类别和城市ID以及其他数据构建广告)

要保留我要执行的新广告:(em = EntityManager)

City city = em.find(City.class, city_id);
Category category = em.find(Category.class, category_id);

Ad ad = new Ad();
ad.setCity(city);
ad.setCategory(category);
ad.set(...otherstuff);
em.persist(ad);
Run Code Online (Sandbox Code Playgroud)

这很好,但是hibernate执行城市选择和类别选择,然后执行插入.如果我在SQL中执行此操作并且我知道id我将只执行一个insert语句(之前没有选择)

那么,这样做是错误的吗?或者这只是ORM的本质

Mau*_*rry 6

使用getReference方法代替find