hibernate - 为什么休眠返回具有不同别名的同一列?
问题描述
@Entity
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int number;
private String name;
@ManyToOne()
private UserDetails user;
public UserDetails getUserDetails() {
return user;
}
public void setUserDetails(UserDetails user) {
this.user = user;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Vehicle [number=" + number + ", name=" + name+"]";
}
}
@Entity
public class UserDetails {
@Id
private int userId;
private String userName;
@OneToMany(cascade = CascadeType.ALL,mappedBy = "user")
private List<Vehicle> vehicle=new ArrayList<Vehicle>();
public List<Vehicle> getVehicle() {
return vehicle;
}
public void setVehicle(List<Vehicle> vehicle) {
this.vehicle = vehicle;
}
@Lob
private String Description;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
@Override
public String toString() {
return "UserDetails [userId=" + userId + ", userName=" + userName + ", vehicle=" + vehicle + ", Description="
+ Description + "]";
}
我
得到以下结果。但在此结果中,突出显示的行具有相同的列名但具有不同的别名。为什么hibernate会选择同一个cloumn?
engine.transaction.jta.platform.internal.NoJtaPlatform] Hibernate:从 hibernate_sequence 中选择 next_val 作为 id_val 进行更新 Hibernate:更新 hibernate_sequence 设置 next_val=?next_val=? Hibernate: 插入 UserDetails (Description, userName, userId) 值 (?, ?, ?) Hibernate: 插入 Vehicle (name, user_userId, number) 值 (?, ?, ?) Hibernate: select userdetail0_.userId as userid1_0_0_, userdetail0_ .Description as descript2_0_0_, userdetail0_.userName as username3_0_0_ from UserDetails userdetail0_ where userdetail0_.userId=? Hibernate:选择vehicle0_.number作为number1_1_0_,vehicle0_.name作为name2_1_0_,vehicle0_.user_userId作为user_use3_1_0_,userdetail1_.userId作为userid1_0_1_,userdetail1_.Description作为descript2_0_1_,userdetail1_。userName as username3_0_1_ from Vehicle vehicle0_ left outer join UserDetails userdetail1_ on vehicle0_.user_userId=userdetail1_.userId where vehicle0_.number=? 休眠:选择 vehicle0_.user_userId 作为 user_use3_1_0_,vehicle0_.number 作为 number1_1_0_,vehicle0_.number 作为 number1_1_1_,vehicle0_.name 作为 name2_1_1_,vehicle0_.user_userId 作为 user_use3_1_1_ from Vehicle vehicle0_ where vehicle0_.user_userId=? 用户名 ==> UserDetails [userId=0, userName=Vickram, vehicle=[Vehicle [number=1, name=Car]], Description=Tall white] 车辆 ===>UserDetails [userId=0, userName=Vickram,车辆=[车辆[编号=1,名称=汽车]],描述=高白]
解决方案
那是因为 6.0 版之前的 Hibernate 没有专门的 SQL AST 模型来去重。属性的每个列映射只是“传递”到 SQL,即它为需要初始化的每个属性选择相应的映射列。
推荐阅读
- typescript - 改变“let”声明的范围
- javascript - 新手需要强制php页面重新加载一次
- css - 如何更改全局 CSS
- android - 当我尝试在android中解密时出现AES BadTag异常
- validation - Cakephp 自定义验证方法返回 False 但保存并不显示任何消息
- mongodb - 无法在 Ubuntu 20.04 上启动 MongoDB 服务器
- post - 使用 RestAssured,我得到了部分响应。不知道我到底错过了什么
- firebase - Flutter FireStore 查询使用状态
- python - Django:嵌套的 OuterRef 无法访问祖父母的 ID
- reactjs - 没有浏览器刷新,MERN 赞成/反对投票不会更新