JPA将一个表Map为多对一

vsaztqbk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个用例,我想将一个表的多个行Map为一个实体,具有@OneToMany或@ElementCollection的列表。
这是我的table:

company | name | detail | detail_value |
1       | C1   | d1     | 100          |
1       | C1   | d2     | 200          |
2       | C2   | d1     | 500          |

字符串
所以在这里,我理想地希望以以下方式Map它:

class CompanyDetails {
 Long companyId;
 List<Detail> details;
}

class Detail {
  String detail;
  Double value;
}


为什么要这样做呢?因为我想在CompanyDetails中放置一些业务和验证逻辑,它充当一种聚合根。
提前感谢您的善意帮助。最好的问候,亚历克斯

xjreopfe

xjreopfe1#

我同意上面的第一条评论-没有规范化和主键,你不能正确地修改数据。但是如果你只需要从DB中读取实体,那就可以了(对不起Kotlin):

@Entity
@Subselect("select distinct id, name from company")
open class Company {
    @Id
    @Column(name = "id", nullable = false)
    open var id: Long? = null

    @Column(name = "name")
    open var name: String? = null

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(
            name = "company",
            joinColumns = [JoinColumn(name = "id")],
            foreignKey = ForeignKey(ConstraintMode.NO_CONSTRAINT)
    )
    open var details: MutableSet<CompanyDetails> = mutableSetOf()
}

@Embeddable
open class CompanyDetails {

    @Column(name = "detail")
    open var detail: String? = null

    @Column(name = "detail_value")
    open var value: String? = null

}

字符串

相关问题