JPA@OneToOne与未从其导出的实体';s OSGi束
我试图在相当复杂的OSGi环境中使用JPA建立一个简单的外键关系 我要使用的两个实体是以捆绑的形式构建的,如下所示: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
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?(应该在捆绑包中,而不是在包中)。