Java 如何管理具有复合id的实体中的枚举集合?

Java 如何管理具有复合id的实体中的枚举集合?,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个具有复合id和枚举集合的实体,但我无法设置JPA注释来正确配置它 下面是表的SQL语句: create table`ReadWriteRight`( `idProfil`bigint不为空, `idState`bigint不为空, `读`布尔, `写`布尔, 主键(`idProfil`、`idState`), 约束'FK_ReadWriteRight_Profil'外键('idProfil')引用'Profil'('idProfil'), 约束'FK\u ReadWriteRight\u

我有一个具有复合id和枚举集合的实体,但我无法设置JPA注释来正确配置它

下面是表的SQL语句:

create table`ReadWriteRight`(
`idProfil`bigint不为空,
`idState`bigint不为空,
`读`布尔,
`写`布尔,
主键(`idProfil`、`idState`),
约束'FK_ReadWriteRight_Profil'外键('idProfil')引用'Profil'('idProfil'),
约束'FK\u ReadWriteRight\u State'外键('idState`)引用'State`('idState`)
)engine=InnoDB默认字符集=utf8;
创建表“AssoReadRight\u表单”(
`idProfil`bigint不为空,
`idState`bigint不为空,
`typeForm`varchar(50)不为空,
主键(`idProfil`、`idState`、`typeForm`),
约束'FK\u AssoReadRight\u Form\u Profil'外键('idProfil')引用'Profil'('idProfil'),
约束'FK'u AssoReadRight'u Form'u State'外键(`idState`)引用'State`(`idState`)
)engine=InnoDB默认字符集=utf8;
创建表“AssoWriteRight\u表单”(
`idProfil`bigint不为空,
`idState`bigint`不为空,
`typeForm`varchar(50)不为空,
主键(`idProfil`、`idState`、`typeForm`),
约束'FK'u AssoWriteRight'u Form'u Profil'外键('idProfil')引用'Profil'('idProfil'),
约束'FK'u AssoWriteRight'u Form'u State'外键(`idState`)引用'State`(`idState`)
)engine=InnoDB默认字符集=utf8;
这里是带有JPA注释的Java:

@实体
@表(name=“ReadWriteRight”)
公共类ReadWriteRight实现可序列化{
私有静态最终长serialVersionUID=1L;
公共枚举类型{
表1、表2;
}
@可嵌入
公共静态最终类ReadWriteRightId实现可序列化{
私有静态最终长serialVersionUID=1L;
@许多酮
@JoinColumn(name=“idProfil”,nullable=false)
私有Profil Profil;
@许多酮
@JoinColumn(name=“idState”,nullable=false)
私营国家;
[...]
}
@嵌入ID
私有ReadWriteRightId;
@列(name=“read”)
私有布尔读取;
@列(name=“write”)
私有布尔写;
@枚举(EnumType.STRING)
@ElementCollection(targetClass=TypeForm.class,fetch=FetchType.LAZY)
@CollectionTable(name=“AssoReadRight\u Form”,joinColumns={@JoinColumn(name=“idProfil”,nullable=false),@JoinColumn(name=“idState”,nullable=false)})
@列(name=“typeForm”)
私有集公式体系;
@枚举(EnumType.STRING)
@ElementCollection(targetClass=TypeForm.class,fetch=FetchType.LAZY)
@CollectionTable(name=“AssoWriteRight\u Form”,joinColumns={@JoinColumn(name=“idProfil”,nullable=false),@JoinColumn(name=“idState”,nullable=false)})
@列(name=“typeForm”)
私人制定的公式;
[...]
}

我通过一些修改解决了我的问题:

首先,我必须更改表
AssoWriteRight\u Form
AssoReadRight\u Form
的外键,以便它们从表
ReadWriteRight
链接到复合id:

创建表'AssoReadRight\u表单'(
`idProfil`bigint不为空,
`idState`bigint不为空,
`typeForm`varchar(50)不为空,
主键(`idProfil`、`idState`、`typeForm`),
约束'FK'u AssoReadRight'u Form'外键('idProfil','idState')引用'ReadWriteRight'('idProfil','idState`)
)engine=InnoDB默认字符集=utf8;
创建表“AssoWriteRight\u表单”(
`idProfil`bigint不为空,
`idState`bigint`不为空,
`typeForm`varchar(50)不为空,
主键(`idProfil`、`idState`、`typeForm`),
约束'FK'u AssoWriteRight'u Form'外键('idProfil','idState')引用了'ReadWriteRight'('idProfil','idState`)
)engine=InnoDB默认字符集=utf8;
我还必须更改JPA配置,以便关联表和基表之间的
@JoinColumn
链接正确:

@枚举(EnumType.STRING)
@ElementCollection(targetClass=TypeForm.class,fetch=FetchType.LAZY)
@CollectionTable(name=“AssoReadRight\u Form”,joinColumns={@JoinColumn(name=“idProfil”,nullable=false,referencedColumnName=“idProfil”),
@JoinColumn(name=“idState”,nullable=false,referencedColumnName=“idState”)}
@列(name=“typeForm”)
私有集公式体系;
@枚举(EnumType.STRING)
@ElementCollection(targetClass=TypeForm.class,fetch=FetchType.LAZY)
@CollectionTable(name=“AssoWriteRight\u Form”,joinColumns={@JoinColumn(name=“idProfil”,nullable=false,referencedColumnName=“idProfil”),
@JoinColumn(name=“idState”,nullable=false,referencedColumnName=“idState”)}
@列(name=“typeForm”)
私人制定的公式;