JPA@OneToOne与未从其导出的实体';s OSGi束

JPA@OneToOne与未从其导出的实体';s OSGi束,jpa,osgi,Jpa,Osgi,我试图在相当复杂的OSGi环境中使用JPA建立一个简单的外键关系 我要使用的两个实体是以捆绑的形式构建的,如下所示: masterbundle |->org.masterpackage.persistence |-> MasterEntityDto.java slavebundle |->org.slavepackage.persistence |-> SlaveEntity.java SlaveEntity想引用masterentitydt来像这样 @En

我试图在相当复杂的OSGi环境中使用JPA建立一个简单的外键关系

我要使用的两个实体是以捆绑的形式构建的,如下所示:

masterbundle
|->org.masterpackage.persistence
   |-> MasterEntityDto.java
slavebundle
|->org.slavepackage.persistence
   |-> SlaveEntity.java
SlaveEntity
想引用
masterentitydt来像这样

@Entity(name = "SlaveEntity")
public class SlaveEntity {
  @Id
  @Column(name = "slaveID")
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  @OneToOne
  @JoinColumn(name = "masterEntity_id")
  private MasterEntity masterEntity;
  // snip..
}
现在,这失败了,因为我认为,
masterbundle
没有将MasterEntityDto(或其包)导出。我们使用的是OSGi的服务方面,masterBundle是
提供接口
——使用Dto而不是Dto的服务。 当bundle启动时,我看到的例外情况是,
org.osgi.framework.BundleException:bundle slavebundle[121]中未解决的约束:无法解决121.8:缺少需求[121.8]osgi.willing.package

问题:如何创建从
SlaveEntity
MasterEntityDto
@OneToOne
关系?在使用OSGi服务平台时,我只公开服务而不公开整个捆绑包/包,这在中是不可能的吗

编辑1 根据要求:
MasterEntityDto
没有什么特别之处

@Entity(name = "MasterEntityDto")
public class MasterEntityDto {
@Id
@Column(name = "id", length = 128)
private String masterId;
// snip 
}

我希望JPA制作一个
SlaveEntity
-表,其中包含列
SlaveId
(这是表PK)和
masterEntity\u id
,它将充当外键,指向表
MasterEntityDto
id

确实需要导出包含域类(如MasterEntityDto)的包,以便JPA捆绑包具有实例化它们的可见性


因此,将此类软件包与包含实现/逻辑代码的其他软件包分开是非常重要的,这些软件包应该是私有的。

能否将
MasterEntityDto的代码显示给
?数据库中的哪列包含外键?我用
MasterEntityDto
的代码更新了我的帖子。我不确定这是否真的相关。还试图描述桌子应该是什么样子。我说的是单向的一对一关系,因为我不能将
masterentitydt修改为
。我只是想加强它。另外,我要说的是,实际的代码是不同的——更复杂,更渴望这篇文章。这就是它的精髓,我明白了。然而,在OSGi服务平台中,只向服务组件公开接口(在
-定义中使用
)。这意味着,如果我想正确使用JPA,我不能仅仅依赖服务功能,而需要OSGi组件功能来公开某些包(在某些
manifest.mf
中使用
export-package
)。对吗?只是确保我正确理解OSGi+JPA。是的。添加此句子是为了满足StackOverflow最小注释大小规则。后续问题。我还是不能让它工作。我不断得到:
[SlaveEntity]使用非实体[MasterEntity]作为关系中的目标实体…
。但是,正如您所看到的,
MasterEntity
是一个工作实体。这两个实体都在各自的
persistence.xml
s中定义。是否可能仅仅导出
MasterEntity
s包不起作用,因为它不包含
MasterEntity
s persistence.xml?(应该在捆绑包中,而不是在包中)。