作为具有多对多关系可嵌入的JPA(休眠)的Kotlin数据类:为什么集合始终为null?

时间:2018-08-16 00:26:05

标签: java hibernate spring-boot jpa kotlin

我有一个Spring Boot 2 + Hibernate + Kotlin项目。

我正在尝试将具有@Embeddable的实体映射为Kotlin data类。嵌入式包含2个标准字段和一个单向多对多集合:

@Entity
data class CampaignPlatform(
        @Id
        val id: Long,

        var name: String,

        var targetAudience: TargetAudience
)

@Embeddable
data class TargetAudience(var ageRangeFrom: Int, var ageRangeTo: Int) {

        @ManyToMany(cascade = [CascadeType.ALL])
        var countries = mutableListOf<Country>()
}

创建,填充和保存实体时,该实体会正常保存,但是无论我做什么,countries集合始终为空(不理会它,添加国家/地区)或将其替换为另一个包含国家/地区的列表),则多对多联接表中不会保留任何内容。没有记录异常。

请注意,我使用了Hibernate DDL模式创建,并且确实创建了多对多联接表。但是没有插入任何内容。

但是,如果我将类修改为非数据类并将所有属性移到类的主体上,则它将按预期工作:

@Embeddable
class TargetAudience {
        var ageRangeFrom: Int = -1

        var ageRangeTo: Int = -1

        @ManyToMany(cascade = [CascadeType.ALL])
        var countries = mutableListOf<Country>()
}

正在发生什么,如何使它与data类一起工作?

更新:

实际上,确定我是否工作的因素是@Embedded类中是否有构造函数,无论它是否为data类。当然,data必须必须具有构造函数。

我已经使用jpa Kotlin编译器插件为我的实体生成默认的(空)构造函数(并假设它也对可嵌入对象使用)。

0 个答案:

没有答案