hibernate没有正确构建查询

我的项目是用Spring Boot和Kotlin构建的。

我有一个Message ,可能有一个父消息(当回应消息),代码如下所示:

 @Entity class Message( @field: Id @field:GeneratedValue var id : Long = 0, @field: ManyToOne(targetEntity = Employee::class) var sender:Employee?=null, @field: ManyToOne(targetEntity = Employee::class) var receiver:Employee?=null, var time:LocalDateTime, var content: String, var read:Boolean, @field: ManyToOne(targetEntity = Message::class) @Nullable var father:Message?=null) {} 

当调用这个查询(使用JpaRepository)时:

 fun findByReceiverIdAndReadFalse(id:Long):List 

我得到这个错误:

Unknown column 'message0_.father_id' in 'field list'

它实际上应该是message0_.father.id ,而不是father_id (父亲是消息实体)。

Hibernate构建的完整查询是这样的:

 select message0_.id as id1_5_, message0_.content as content2_5_, message0_.father_id as father_i5_5_, message0_.read as read3_5_, message0_.receiver_id as receiver6_5_, message0_.sender_id as sender_i7_5_, message0_.time as time4_5_ from message message0_ left outer join employee employee1_ on message0_.receiver_id=employee1_.id where employee1_.id=? and message0_.read=0 

Employeeclass级:

 @Entity data class Employee( @field: Id @field:GeneratedValue var id : Long = 0, var username : String = "", var password : String ="", var name : String ="", var lastName: String ="", var phone : String="", var email : String ="", var sex : String ="", var active : Boolean = false, @field: ManyToOne(targetEntity = District::class) var district : District? = null, @field: ManyToOne(targetEntity = Company::class) var company : Company? = null, var picture:String="", var resetPasswordCode:String="", // código que se le envía al usuario en el momento que crea // la cuenta, deberá abrir en enlace del correo para activarla // de ahí que "active" sea false. var activationCode : String="", // La fecha en que caduca el código activación: 5 días para activar var activationCodeExpiration : LocalDateTime = LocalDateTime.now().plusDays(5), var enabled : Boolean = true, var accountNonExpired: Boolean = true, var credentialsNonExpired: Boolean = true, var accountNonLocked : Boolean = true, @field: OneToMany(targetEntity = Roles::class) var roles :MutableSet = mutableSetOf()) { fun toUser() : User { val authorities = mutableSetOf() roles.forEach{authorities.add(SimpleGrantedAuthority(it.role))} return User(username,password,enabled,accountNonExpired,credentialsNonExpired,accountNonLocked, authorities) } } 

有什么办法强制使用适当的领域? 我错过了什么吗?

问题是在字段father没有@JoinColumn注释。 Join列表示JPA中的哪个列(而不是field!)引用了我们当前的实体,而targetEntity说JPA(而且这已经完全过时了),哪个类表示我们当前的字段。