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
Jakarta ee @Embeddeble和@EmbeddedId仅由复杂类组成_Jakarta Ee_Jpa - Fatal编程技术网

Jakarta ee @Embeddeble和@EmbeddedId仅由复杂类组成

Jakarta ee @Embeddeble和@EmbeddedId仅由复杂类组成,jakarta-ee,jpa,Jakarta Ee,Jpa,我有以下问题: 我的一个实体必须使用一个复杂的类作为ID(为了解决这个问题,我使用@EmbeddedId) 这个复杂类有一个由另外两个复杂类组成的组合主键[我得到了以下错误:原因:org.hibernate.AnnotationException:model.IElementKey没有持久id属性:model.impl.Element.id] 问题是如何在不向ID类添加非复杂类型的情况下解决此问题 编辑:我必须只使用JPA[javax.persistence.*] Edit2:小代码示例(为了简

我有以下问题:

我的一个实体必须使用一个复杂的类作为ID(为了解决这个问题,我使用@EmbeddedId)

这个复杂类有一个由另外两个复杂类组成的组合主键[我得到了以下错误:原因:org.hibernate.AnnotationException:model.IElementKey没有持久id属性:model.impl.Element.id]

问题是如何在不向ID类添加非复杂类型的情况下解决此问题

编辑:我必须只使用JPA[javax.persistence.*]

Edit2:小代码示例(为了简单起见,省略了getter/setter)

@可嵌入
公共类EntityKey实现了IEntityKey,可序列化{
私有静态最终长serialVersionUID=1L;
@多通(targetEntity=Entity1.class,可选=false)
私有entity1 entity1=null;
@多通(targetEntity=Entity2.class,可选=false)
私有IEntity2 entity2=null;
}
@实体
公共类MixEntity实现了imexentity{
@嵌入ID
私有IEntyKey id=null;
}
@实体
公共类Entity1实现了Entity1{
@身份证
私有长id=null;
@OneToMany(targetEntity=MixEntity.class,mappedBy=“id.entity1”)
private List mixEntities=new ArrayList();
}
@实体
公共类Entity2实现了IEntity2{
@身份证
私有长id=null;
@OneToMany(targetEntity=MixEntity.class,mappedBy=“id.entity2”)
private List mixEntities=new ArrayList();
}

在这种情况下,我的建议是使用具体类,而不是抽象类或接口。原因是JPA、Hibernate等在后台使用反射,在这种情况下需要具体的类,例如this,并检索信息以自动生成查询。如果在framekork调用clazz.instance()时使用抽象类,则会出现异常

因此,您应该使用具体类

我希望这能有所帮助,可能有点晚了。 但也许它仍然会帮助其他人:

我知道写起来很直截了当
@EmbeddedId(targetEntity=SomeClass.class)

但由于这对你的错误没有影响,所以试一下吧
@Target
注释

它会完成任务的

@Entity
public class MixEntity implements IMixEntity {

    @EmbeddedId
    @Target(EntityKey.class)
    private IEntityKey  id              = null;

}

你为什么让你的生活变得困难。为什么不遵循最佳实践,使用一个单列、技术性、自动生成的ID呢?我希望可以,但不幸的是,由于许多原因,这不是一个选项。
@Entity
public class MixEntity implements IMixEntity {

    @EmbeddedId
    @Target(EntityKey.class)
    private IEntityKey  id              = null;

}