Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
如何在Kotlin中的委托属性上放置JPA注释?_Kotlin_Spring Data Jpa_Annotations_Delegates_Eclipselink - Fatal编程技术网

如何在Kotlin中的委托属性上放置JPA注释?

如何在Kotlin中的委托属性上放置JPA注释?,kotlin,spring-data-jpa,annotations,delegates,eclipselink,Kotlin,Spring Data Jpa,Annotations,Delegates,Eclipselink,假设我有一个JPA实体,比如 @Entity @Table(name = "plasmid_reference") class PlasmidReference { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Int? = null @Column(name = "project_id") var projectId: Int?

假设我有一个JPA实体,比如

@Entity
@Table(name = "plasmid_reference")
class PlasmidReference {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int? = null

    @Column(name = "project_id")
    var projectId: Int? = null

    @Column(name = "plasmid_id")
    var plasmidId: Int? = null
}
现在,我知道,对于
plasmic\u reference
join表中的每个条目,这些属性都不能为null。(事实上,数据库强制执行此操作。)

我怎么能告诉科特林

一种简单的方法是尝试使用
lateinit

@Entity
@Table(name = "plasmid_reference")
class PlasmidReference {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    lateinit var id: Int

    @Column(name = "project_id")
    lateinit var projectId: Int

    @Column(name = "plasmid_id")
    lateinit var plasmidId: Int
}
这甚至不编译

在基元类型的属性上不允许使用“lateinit”修饰符

好的,让我们使用建议的解决方案并转换为使用代理

@Entity
@Table(name = "plasmid_reference")
class PlasmidReference {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id by notNull<Int>()

    @Column(name = "project_id")
    var projectId by notNull<Int>()

    @Column(name = "plasmid_id")
    var plasmidId by notNull<Int>()
}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa我没有主意了


如何解决此问题?

将其移动到构造函数定义应该可以解决此问题

@Entity
@Table(name = "plasmid_reference")
class PlasmidReference(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int? = null,
    @Column(name = "project_id")
    var projectId: Int,
    @Column(name = "plasmid_id")
    var plasmidId: Int
)

不,恐怕不行:“org.eclipse.persistence.exceptions.DescriptorException异常描述:实例创建方法[com.[…].plasmedreference.],没有参数,不存在或不可访问。”异常表示类中没有arg构造函数。Hibernate不需要arg构造函数即可工作。它是Java框架,所以当我们想将它与kotlin一起使用时,我们需要使用一些插件。。。瞧,我想这些早在很久以前就已经很活跃了,但我们只有
kotlin noarg
而不是
kotlin jpa
。-非常感谢。
@Entity
@Table(name = "plasmid_reference")
class PlasmidReference {

    @delegate:Id
    @delegate:GeneratedValue(strategy = GenerationType.IDENTITY)
    var id by notNull<Int>()

    @delegate:Column(name = "project_id")
    var projectId by notNull<Int>()

    @delegate:Column(name = "plasmid_id")
    var plasmidId by notNull<Int>()
}
The attribute [plasmidId] is not present in the managed type [EntityTypeImpl@960932033:PlasmidReference 
[ javaType: class com.[...].PlasmidReference descriptor: RelationalDescriptor(com.[...].PlasmidReference --> [DatabaseTable(plasmid_reference)]), mappings: 3]].
    at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.getAttribute(ManagedTypeImpl.java:151)
    at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:635)
@Entity
@Table(name = "plasmid_reference")
class PlasmidReference(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int? = null,
    @Column(name = "project_id")
    var projectId: Int,
    @Column(name = "plasmid_id")
    var plasmidId: Int
)