【问题标题】:Why hibernate returns same column with different alias name?为什么休眠返回具有不同别名的同一列?
【发布时间】:2021-08-28 01:09:37
【问题描述】:
@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?

Hibernate:如果存在则删除表 hibernate_sequence Hibernate:如果存在则删除表 UserDetails 休眠:如果存在则删除表车辆 Hibernate:创建表 hibernate_sequence (next_val bigint) engine=InnoDB Hibernate:插入 hibernate_sequence 值(1) Hibernate:创建表 UserDetails (userId integer not null, Description longtext, userName varchar(255), primary key (userId)) engine=InnoDB Hibernate:创建表Vehicle (number integer not null, name varchar(255), user_userId integer, primary key (number)) engine=InnoDB Hibernate:alter table Vehicle 添加约束 FKj7mb7jwf8fhf3b6naff1uy9b4 外键 (user_userId) 引用 UserDetails (userId) 2021 年 6 月 11 日上午 9:15:22 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator 启动服务 信息:HHH000490:使用 JtaPlatform 实现:[org.hibernate.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) 值 (?, ?, ?) 休眠:插入车辆(名称,user_userId,数字)值(?,?,?) Hibernate:从UserDetails userdetail0_中选择userdetail0_.userId作为userid1_0_0_,userdetail0_.Description作为descript2_0_0_,userdetail0_.userName作为username3_0_0_ 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 作为 username3_0_1_ from Vehicle vehicle0_ left outer join User_Details userdetail1_ on vehicle0_。 =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=高白] 车辆 ===>UserDetails [userId=0, userName=Vickram, vehicle=[Vehicle [number=1, name=Car]], Description=Tall white]

【问题讨论】:

  • 能否请您显示您执行的 hql 查询。
  • 我没有写 hql 查询。 Hibernate 为我生成了查询。请参考下面的代码。谢谢

标签: hibernate


【解决方案1】:

这是因为 6.0 版之前的 Hibernate 没有专门的 SQL AST 模型来进行重复数据删除。属性的每个列映射只是“传递”到 SQL,即它为需要初始化的每个属性选择相应的映射列。

【讨论】:

  • 感谢您的回复。你能不能用外行的方式解释一下,因为它很难理解。谢谢你。请详细解释一下
  • 通俗地说,这就是 Hibernate 6.0 之前的情况。现在不用担心,以后更新 Hibernate 会变得更好。
猜你喜欢
  • 1970-01-01
  • 2022-10-23
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2012-08-13
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多