JPA @OneToOne,其实体不是从OSGi Bundle导出的

时间:2013-10-21 12:12:54

标签: jpa osgi

我正在尝试在相当复杂的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;

问题:如何创建从@OneToOneSlaveEntity的{​​{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列。

1 个答案:

答案 0 :(得分:1)

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

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