我在广告实体中有以下映射:
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;
在某些时候,我想保留一个新的广告...但我只知道类别和城市的 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);
这很好,但是 hibernate 执行城市选择和类别选择,然后执行插入。如果我在 SQL 中执行此操作并且我知道 id,我将只执行一条插入语句(事先不进行选择)
那么,我这样做的方式是错误的吗?或者这就是 ORM 的本质
Use getReference
方法而不是find
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)