[Hibernate]同名实体类的HQL映射问题

一、问题

JAP执行查询方法时,打印的SQL语句有误,from关键词后接的另一张表

fun findByIdAndUid(id: Long, uid: Long):TaskEntity?

二、原因 

项目中存在多个同名User实体类,映射时@Entity注解默认使用Unqualified name。这将导致同名映射覆盖启动报错

  • com.xxx.a.User
package com.xxx.a
@Entity()
@Table(name = "user", schema = "xxxA_user", catalog = "xxxA_user")
data class User(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id", nullable = false)
        var id: Long,
)
  • com.xxx.b.c.User

package com.xxx.b.c
@Entity()
@Table(name = "user", schema = "xxxBC_user", catalog = "xxxBC_user")
data class User(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id", nullable = false)
        var id: Long,
)

 三、解决办法

方法有两种方式,目的在于解决HQL映射失败问题。

  1. User实体类中@Entity使用全路径赋值name(推荐)
    package com.xxx.a
    @Entity(name = "com.xxx.a.User")
    @Table(name = "user", schema = "xxxA_user", catalog = "xxxA_user")
    data class User(
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name = "id", nullable = false)
            var id: Long,
    )

     

  2. 持久层方法添加@Query注解,带路径指定实体类
    @Query("select * from com.xxx.a.User where id = ?1 and uid = ?2")
    fun findByIdAndUid(id: Long, uid: Long):TaskEntity?

     

参考:

使用hibernate的annotation如何设置一个实体类的auto-import=false(4楼回复)——islandrabbit

Hibernate的中auto-import属性详解——dongruan00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值