如何在Kotlin中的委托属性上放置JPA注释?
假设我有一个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?
@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
)