当前位置: 首页 > 知识库问答 >
问题:

为什么hibernate用不同的别名返回相同的列?

穆理
2023-03-14
@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_sequence hibernate:删除表(如果存在)UserDetails Hibernate:如果存在,则删除表车辆Hibernate:创建表hibernate_sequence(next_val bigint)Engine=InnoDate:插入到hibernate_sequence值(1)Hibernate:创建表UserDetails(用户ID整数not null,Description longtext,用户名varchar(255),主键(userId))Engine=InnoDb Hibernate:创建表车辆(编号整数not null,name varchar(255),user_userId整数,主键(number))Engine=Innodb Hibernate:alter table车辆添加约束上午:15:22 org.hibernate.engine.transaction.jta.platform.internal.jtaplatformminitiator initiateService信息:hhh000490:使用JtaPlatform实现:[org.hibernate.engine.transaction.jta.platform.internal.nojtaPlatform]hibernate:从hibernate_sequence中选择next_val作为id_valfor update hibernate:update hibernate_sequence set next_val=?next_val=在哪里?Hibernate:在UserDetails(描述、用户名、用户ID)中插入值(?、?、?)Hibernate:在Vehicle(名称,user_userId,number)中插入值(?,?,?)Hibernate:选择userdetail0_.userid作为userid1_0_0_,userdetail0_.description作为descript2_0_0_,userdetail0_.username作为username3_0_0_from UserDetails userdetail0_where userdetail0_.userid=?Hibernate:选择vehicle0_.number as number1_1_0_,vehicle0_.name as name2_1_0_,vehicle0_.user_userid as user_use3_1_0_,userdetail1_.userid as userid1_0_1_,userdetail1_.description as descript2_0_1_,userdetail1_.username as username3_0_1_from Vehicle vehicle0_.user_detail1_左外部连接UserDetails userdetail1_上的userdetail1_Hibernate:选择vehicle0_.user_userid为user_use3_1_0_,vehicle0_.number为number1_1_0_,vehicle0_.number为number1_1_1_,vehicle0_.user_userid为user_use3_1_1_from Vehicle vehicle0_where vehicle0_.user_userid=?用户名==>UserDetails[Userid=0,Username=Vickram],Vehicle=[Vehictor[Number=1,name=CAR]],Description=高大白色]车辆====>UserDetails[Userid=0,Username=Vickram,Vehicle=[Vehictor[Number=1,name=CAR]],Description=高大白色]

共有1个答案

汝和裕
2023-03-14

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

 类似资料:
  • 问题内容: 今天,我了解并决定将其使用和测试。我知道整数是不可变的,因此id应该是(?)相同。但是,当我在提示中进行测试时,我注意到了一些细微的差异,并想找出其背后的原因。 凉!到目前为止,所有签出。但是之后… 好的,所以测试一下,我注意到此行为一直持续到256年。id最多可以是8位数字,然后257将返回更大的id,可以是15位数字。因此类型必须是8个字节。 所以我发现它与8个字节长有关,但是任何

  • 问题内容: 我正在阅读Head First Java的书中的一句话: 关键是哈希码可以相同,而不必保证对象相等,因为该方法中使用的“哈希算法” 可能会为多个对象返回相同的值。 为什么该方法可能为不同的对象返回相同的值?这不会引起问题吗? 问题答案: *对对象进行 *散列 意味着“ 找到可以由相同实例一次又一次地再现的良好的描述性值(数字) ”。由于Java的哈希码类型为,因此只能具有不同的值。这就

  • 我正在使用Microsoft Graph Users API根据我们的ActiveDirectory验证用户名或电子邮件地址列表。名称搜索: https://graph.microsoft.com/v1.0/me/people/?$search=John.Smith 返回其他数据,如和。但如果我使用电子邮件搜索: null 我是否需要额外的权限来获取相同的数据? 更新:我按照下面的建议在https

  • 问题内容: 我运行了跟随脚本(java),它给了我奇怪的结果。有人可以帮忙解释吗? 记录结果(彼此不同): - - 背景 - - 我想将自己的keyGenrator用于@Cacheable批注(Spring和ehCache)。 在这种情况下,我发现缓存总是丢失的。 然后,我必须更改为: 谢谢 问题答案: 这是因为for 不会被覆盖。即使条目相同,也没有理由为什么的两个实例应该具有相同的值。 试试这

  • 问题内容: 根据MSDN BOL(在线图书)对SOME的描述| ANY(Transact-SQL), SOME和ANY是等效的。 使用某些| | | | | | | | ANY以使查询更具可读性。 但是 ,这是为什么在TSQL中有两个关键字具有完全相同的目的的 唯一 原因吗? 它们具有相同的功能是否有历史原因? 问题答案: 根据ANSI-92 SQL标准(搜索“ SOME”)。也在这里,文字 我怀

  • 问题内容: 我在某处读到,函数应始终仅返回一种类型,因此以下代码被视为错误代码: 我想更好的解决方案是 返回None然后创建一个新的空元组不是更便宜的内存明智的选择吗?或者即使在较大的项目中,这种时差也太小而无法引起注意? 问题答案: 为什么函数应该返回一致类型的值?满足以下两个规则。 规则1-函数具有“类型”-输入映射到输出。它必须返回一致的结果类型,否则它不是函数。一团糟。 从数学上讲,我们说