Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Kotlin、JPA和@Transient_Hibernate_Jpa 2.0_Kotlin - Fatal编程技术网

Hibernate Kotlin、JPA和@Transient

Hibernate Kotlin、JPA和@Transient,hibernate,jpa-2.0,kotlin,Hibernate,Jpa 2.0,Kotlin,我有一个从Java迁移到Kotlin的实体类。inetAddress的一个属性用@Transient注释,以防止它被持久化到关系数据库中。但是,JPA Hibernate实现没有看到此注释,而是将其作为自己的字段放在数据库中。当用Java编写类时,这一切都能正常工作 有人知道如何正确注释这个Kotlin类,以便JPA/Hibernate能够看到@Transient注释,而不是将inetAddress属性放在数据库中吗 package infr.audio.model import com.fa

我有一个从Java迁移到Kotlin的实体类。inetAddress的一个属性用@Transient注释,以防止它被持久化到关系数据库中。但是,JPA Hibernate实现没有看到此注释,而是将其作为自己的字段放在数据库中。当用Java编写类时,这一切都能正常工作

有人知道如何正确注释这个Kotlin类,以便JPA/Hibernate能够看到@Transient注释,而不是将inetAddress属性放在数据库中吗

package infr.audio.model

import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonProperty
import infr.audio.messages.InetAddressWrapper
import java.io.Serializable
import java.net.InetAddress
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id
import javax.persistence.NamedQueries
import javax.persistence.NamedQuery
import javax.persistence.Table

@Entity
@Table(name = "DIS_JOCKEY")
@NamedQueries(NamedQuery(name = "DisJockeyInfo.find", query = "SELECT m FROM DisJockeyInfo m"), NamedQuery(name = "DisJockeyInfo.findByReservationId", query = "SELECT m FROM DisJockeyInfo m WHERE m.reservationId = :reservationId"), NamedQuery(name = "DisJockeyInfo.findByReservationIdAndName", query = "SELECT m FROM DisJockeyInfo m WHERE m.reservationId = :reservationId AND m.name = :name"), NamedQuery(name = "DisJockeyInfo.findMaxDisEntityIdByReservationId", query = "SELECT MAX(m.disEntityId) FROM DisJockeyInfo m WHERE m.reservationId = :reservationId"), NamedQuery(name = "DisJockeyInfo.findActive", query = "SELECT m FROM DisJockeyInfo m WHERE m.disEntityId IS NOT NULL"), NamedQuery(name = "DisJockeyInfo.findActiveByInetAddress", query = "SELECT m FROM DisJockeyInfo m WHERE m.inetAddress = :inetAddress AND m.disEntityId IS NOT NULL"), NamedQuery(name = "DisJockeyInfo.findActiveByReservationId", query = "SELECT m FROM DisJockeyInfo m WHERE m.reservationId = :reservationId AND m.disEntityId IS NOT NULL"), NamedQuery(name = "DisJockeyInfo.deleteInactive", query = "DELETE FROM DisJockeyInfo m WHERE m.id = :id AND m.disEntityId IS NULL"))
data class DisJockeyInfo(
        @get:Id
        @get:GeneratedValue(strategy = GenerationType.IDENTITY)
        @get:Column(name = "ID")
        var id: Long,
        @get:Column(name = "RESERVATION_ID")
        var reservationId: String?,
        @get:Column(name = "NAME")
        var name: String?,
        @get:Column(name = "DIS_ENTITY_ID")
        var disEntityId: Long?,
        @get:java.beans.Transient
        @get:JsonIgnore
        @field:Transient
        var inetAddress: InetAddress?    
) : GenericEntity, Serializable {

    var inetAddressString: String?
        @Column(name = "INET_ADDRESS")
        @JsonProperty("inetAddress")
        get() = if (inetAddress != null) InetAddressWrapper(inetAddress).encodedInetAddress else null
        set(inetAddressString) {
            inetAddress = if (inetAddressString != null) InetAddressWrapper(inetAddressString).inetAddress else null
        }

    constructor() : this(id = 0L, reservationId = null, name = null, disEntityId = null, inetAddress = null) {}

    companion object {
        /** Serial version */
        private val serialVersionUID = 2027355982760360935L
    }
}

您正在注释字段,而不是注释getter。请注意,getter注释使用了不正确的类型java.beans.Transient,而不是正确的javax.persistence.Transient。

您正在注释字段,而不是注释getter。请注意,您的getter注释使用了不正确的类型java.beans.Transient,而不是正确的javax.persistence.Transient。

只需添加:

import javax.persistence.Transient
只需添加:

import javax.persistence.Transient

您正在注释字段,而不是注释getter。我已经很久没有使用Kotlin了,但我相信我在字段和getter上都添加了@Transient注释:@get:java.beans.Transient。这就是@get:部分的意思,不是吗?除非正确的注释不是java.beans.Transient,而是javax.persistence.TransientYes!非常感谢。这就是答案-如果你把它作为一个答案,我会接受并投票。你是在注释字段而不是注释getter。我已经很久没有使用Kotlin了,但我相信我在字段和getter上都添加了@Transient注释:@get:java.beans.Transient。这就是@get:部分的意思,不是吗?除非正确的注释不是java.beans.Transient,而是javax.persistence.TransientYes!非常感谢。这就是答案——如果你把它作为一个答案,我会接受并投票表决。