我正在尝试在相当复杂的OSGi环境中使用JPA建立一个简单的外键关系。
我想要使用的两个实体的结构如下所示:
masterbundle
|->org.masterpackage.persistence
|-> MasterEntityDto.java
slavebundle
|->org.slavepackage.persistence
|-> SlaveEntity.java
SlaveEntity
想要像MasterEntityDto
那样引用
@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是provide-interface
- 使用Dto 而不是Dto的服务。
捆绑包开始时我看到的例外情况说明org.osgi.framework.BundleException: Unresolved constraint in bundle slavebundle [121]: Unable to resolve 121.8: missing requirement [121.8] osgi.wiring.package;
问题:如何创建从@OneToOne
到SlaveEntity
的{{1}}关系?这在使用OSGi服务平台时是不可能的,我只公开服务而不是整个捆绑/包?
EDIT1 的
根据要求:MasterEntityDto
没什么特别的。
MasterEntityDto
我希望JPA创建一个@Entity(name = "MasterEntityDto")
public class MasterEntityDto {
@Id
@Column(name = "id", length = 128)
private String masterId;
// snip
}
- 表,列SlaveEntity
(这是表PK)和SlaveId
,它们将作为外键,指向表{{1 } masterEntity_id
列。
答案 0 :(得分:1)
包含域类(例如MasterEntityDto)的包确实需要导出,以便JPA包可以具有实例化它们的可见性。
因此,将这些包与包含实现/逻辑代码的其他包分开是非常重要的,这些包应该是私有的。