Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Java JPA-具有嵌入id的映射列表属性_Java_Jpa - Fatal编程技术网

Java JPA-具有嵌入id的映射列表属性

Java JPA-具有嵌入id的映射列表属性,java,jpa,Java,Jpa,我有以下Java实体类: @MapsSuperClass class Request { @OneToMany List<Parameter> parameters; String service; } @Entity class PersistedRequest extends Request { @Id String id; } @Embeddable class Parameter { String key;

我有以下Java实体类:

@MapsSuperClass
class Request {
    @OneToMany
    List<Parameter> parameters; 

    String service; 
}

@Entity
class PersistedRequest extends Request {
     @Id
     String id; 
}

@Embeddable
class Parameter {
     String key; 
     String value; 
}
参数实体在java实体上没有唯一的ID值,但组合请求ID+键是唯一的。因此,我创建了两个实体来存储参数EmbeddedID类:

@Embeddable
class ParameterPK {
    String requestId; 
    String key;
}

@Entity
class ParameterEntity {
    @EmbeddedId
    ParameterPK id; 

    @Embedded
    Parameter parameter; 
}
我的主要问题是:

  • (如何)以某种方式将请求类上的列表映射到上面的数据库模式(其中参数嵌入到ParameterEntity中)?我不想更改java实体(例如,将ParameterEntity放在请求中而不是参数中)

  • 如何为ParameterEntity、ParameterPK和Parameter创建注释,其中键列在ParameterPK和Parameter之间共享


这只回答了部分问题。我仍然不知道是否可以在不使用主键和不更改java实体的情况下持久化“Parameter”类。如果要持久化参数,为什么不创建一个单独的实体并将其用作外键?你可以很好地加入。。没有?那只回答了部分问题。我仍然不知道是否可以在不使用主键和不更改java实体的情况下持久化“Parameter”类。如果要持久化参数,为什么不创建一个单独的实体并将其用作外键?你可以很好地加入。。不
@Embeddable
class ParameterPK {
    String requestId; 
    String key;
}

@Entity
class ParameterEntity {
    @EmbeddedId
    ParameterPK id; 

    @Embedded
    Parameter parameter; 
}