为什么我不能创建新的地址使用:
AddressEntity ad = new AddressEntity();
ad.setCityId(session.get(CityEntity.class, 343))
但它是这样运作的:
Query<CityEntity> query = session.createQuery("from CityEntity where id = 343", CityEntity.class);
query.setFirstResult(0);
query.setMaxResults(1);
List<CityEntity> listCity = query.getResultList();
ad.setCityId(listCity.get(0));
地址实体:
@Entity
@Table(name = "address")
@Getter
@Setter
@ToString
public class AddressEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "address_id")
private Short addressId;
...
...
@ManyToOne
@JoinColumn(name = "city_id")
private CityEntity cityId;
}
城市实体:
@Entity
@Table(name = "city")
@Getter
@Setter
@ToString
public class CityEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "city_id")
private Short cityId;
...
...
...
}
我觉得我不知道什么有用的东西,但我不能理解它是什么
我尝试通过session.get()和query来获取和设置id
1条答案
按热度按时间mwecs4sa1#
这里的问题是主键(
@Id
属性)被定义为Short
,但Java默认将session.get(CityEntity.class, 343)
中的343转换为Integer
;所以JPA会搜索一个带有**id的CityEntity
,而这个id并不存在。给它一个
Short
就可以了;或者:或者:
在后一种情况下,Java仍然会将短文本“装箱”到
Short
对象中。