【问题标题】:Can't form EJB relationship across EAR projects. Relationship Attribute Exception?不能跨 EAR 项目形成 EJB 关系。关系属性异常?
【发布时间】:2013-12-31 03:08:09
【问题描述】:

我正在尝试从一个 EAR 项目访问实体 bean 到另一个 EAR 项目,但出现此错误。

异常描述:[类 com.huwag.ao.server.bvg.tarif.ejb.entity.Tarif] 使用非实体 [class com.huwag.server.ejb.entity.Mandant] 作为目标实体 关系属性 [field mandant]。

我的 Tarif 似乎找不到我的 Mandant 实体。 Tarif 存在于一个耳朵文件中,而 Mandant 存在于另一个文件中(可以说是核心项目)。

我的 Mandant(在核心项目中)如下所示:

    @Entity
@Table(name = "HUW_AO_MANDANT")
public class Mandant implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "MANDANT_ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }    
}

在我依赖的 EAR JAR 里住着这个人:

@Entity
@Table(name = "HUW_AO_TARIF")
@NamedQueries({
    @NamedQuery(
            name = "getAllTarif",
            query = "SELECT t FROM Tarif t") 
        ,
    @NamedQuery(
            name = "getTarifForMandant",
            query = "SELECT t FROM Tarif t where t.mandantId = :mandant")
})
public class Tarif implements Serializable {

    @Id
    @Column(name = "NAME")
    private String name;

    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinColumn(name="MANDANT_ID")
    private Mandant mandant;


    public Mandant getMadant() {
        return mandant;
    }

    public void setMadant(Mandant mandant) {
        this.mandant = mandant;
    }

    public String getName() {
        return name;
    }

    public void setName(String firstName) {
        this.name = firstName;
    }
}

从结构上看是这样的。

我正在尝试从一个实体与另一个部署工件中的另一个实体建立关系。

我正在使用 Glassfish 4。我的 persistence.xml 中没有任何内容,因为据我了解,Glassfish 4 只是查找这些类,而不是查看 persistence.xml。

  • 我是否正确使用了关系注释?
  • 是否需要将这些实体放入 persistence.xml 文件中?
  • 我是否需要提供本地/远程接口,以便一个 EAR 文件可以看到另一个?
  • 是否有可能跨不同的打包工件在 EJB 之间形成这种关系?

【问题讨论】:

  • 谢谢.. 我确实需要将实体放在我的持久性 XML 中。把它作为一个答案,然后我可以 +1 你。
  • 您是否独立发布 EAR 文件?您肯定可以使用核心 EAR 中的 EJB,但我认为必须为它们提供远程 EJB 接口。

标签: java jakarta-ee jpa glassfish ejb


【解决方案1】:

如果您在从属耳朵中没有任何 persistence.xml 文件,我怀疑 glassfish 会知道它必须在那里使用哪些实体。因此,我想您需要使用 persistence.xml 文件中的 <jar-file> XML 元素导入该依赖项。您也正确映射了它们,尽管我会选择 int ID 而不是 String。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多