Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA-连接三个表。一个有PK。另外两个都有PK的一部分_Jpa_Jakarta Ee_Eclipselink - Fatal编程技术网

JPA-连接三个表。一个有PK。另外两个都有PK的一部分

JPA-连接三个表。一个有PK。另外两个都有PK的一部分,jpa,jakarta-ee,eclipselink,Jpa,Jakarta Ee,Eclipselink,我有三个实体: 客户 它有一个复合主键客户id和公司id 数据 ID:数据\u ID FK:区域id(从下方区域开始) FK:客户id(来自上面的客户) 区域 ID:area_ID FK:公司id(来自上述客户) 如何在JPA中创建@Join注释?我想我必须使用@JoinTable,但我不知道怎么做 客户 @Entity @Table(name="customer") @NamedQuery(name="Customer.findAll", query="SELECT c FROM Custom

我有三个实体:

客户
它有一个复合主键<代码>客户id和
公司id

数据
ID:数据\u ID
FK:区域id(从下方区域开始)
FK:客户id(来自上面的客户)

区域
ID:area_ID
FK:公司id(来自上述客户)

如何在JPA中创建@Join注释?我想我必须使用@JoinTable,但我不知道怎么做

客户

@Entity
@Table(name="customer")
@NamedQuery(name="Customer.findAll", query="SELECT c FROM Customer c")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private CustomerPK id;

    //bi-directional many-to-one association to CustomColumnDataCustomer
    @OneToMany(mappedBy="customer")
    private List<CustomColumnDataCustomer> customColumnDataCustomers;
@Entity
@Table(name="custom_column_data_customer")
@NamedQuery(name="CustomColumnDataCustomer.findAll", query="SELECT c FROM     CustomColumnDataCustomer c")
public class CustomColumnDataCustomer implements Serializable {
private static final long serialVersionUID = 1L;

    @Id
    @Column(name="custom_column_data_cust_uid")
    private int customColumnDataCustUid;

    //bi-directional many-to-one association to Customer
    @ManyToOne
    private Customer customer;

    //bi-directional many-to-one association to AreaXCustomColumn
    @ManyToOne
    @JoinColumn(name="area_x_custom_column_uid")
    private AreaXCustomColumn areaXCustomColumn;
CustomColumnDataCustomer

@Entity
@Table(name="customer")
@NamedQuery(name="Customer.findAll", query="SELECT c FROM Customer c")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private CustomerPK id;

    //bi-directional many-to-one association to CustomColumnDataCustomer
    @OneToMany(mappedBy="customer")
    private List<CustomColumnDataCustomer> customColumnDataCustomers;
@Entity
@Table(name="custom_column_data_customer")
@NamedQuery(name="CustomColumnDataCustomer.findAll", query="SELECT c FROM     CustomColumnDataCustomer c")
public class CustomColumnDataCustomer implements Serializable {
private static final long serialVersionUID = 1L;

    @Id
    @Column(name="custom_column_data_cust_uid")
    private int customColumnDataCustUid;

    //bi-directional many-to-one association to Customer
    @ManyToOne
    private Customer customer;

    //bi-directional many-to-one association to AreaXCustomColumn
    @ManyToOne
    @JoinColumn(name="area_x_custom_column_uid")
    private AreaXCustomColumn areaXCustomColumn;
区域自定义列

@Entity
@Table(name="area_x_custom_column")
@NamedQuery(name="AreaXCustomColumn.findAll", query="SELECT a FROM AreaXCustomColumn a")
public class AreaXCustomColumn implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="area_x_custom_column_uid")
    private int areaXCustomColumnUid;

    @Column(name="company_id")
    private String companyId;

    //bi-directional many-to-one association to CustomColumnDataCustomer
    @OneToMany(mappedBy="areaXCustomColumn")
    private List<CustomColumnDataCustomer> customColumnDataCustomers;

    //bi-directional many-to-one association to CustomColumnDefinition
    @ManyToOne
    @JoinColumn(name="custom_column_definition_uid")
    private CustomColumnDefinition customColumnDefinition;
@实体
@表(name=“区域×自定义列”)
@NamedQuery(name=“AreaXCustomColumn.findAll”,query=“从AreaXCustomColumn a中选择a”)
公共类AreaXCustomColumn实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@列(name=“area\u x\u custom\u Column\u uid”)
私有int areaXCustomColumnUid;
@列(name=“company\u id”)
私有字符串公司ID;
//与CustomColumnDataCustomer的双向多对一关联
@OneToMany(mappedBy=“areaXCustomColumn”)
私人客户名单;
//自定义列定义的双向多对一关联
@许多酮
@JoinColumn(name=“自定义列定义uid”)
私有CustomColumnDefinition CustomColumnDefinition;

解决这个问题的方法是使用注释
@EmbeddedId
@JoinColumn

我最近做的一个项目需要一个类似的解决方案。我想如果我用例子来解释它会更容易:

我有三个对象,一个
平台
,一个
EventMaster
和一个
成员

  • 会员身份是您的客户在这种情况下,它有两个PK,即平台ID和EventMaster ID(这由
    @EmbeddedID
    解决):

  • MembershipKey
    类仅由另一个类的两个PK组成:

    @ManyToOne
    @JoinColumn(name = "eventmaster_id")
    private EventMaster eventMaster;
    
    @ManyToOne
    @JoinColumn(name = "mosplatform_id")
    private MOSPlatform platform;
    
  • Platform
    EventMaster
    类看起来都一样(这在
    Platform
    类中):

    @OneToMany(mappedBy=“id.platform”)
    私人名单成员资格;
    
我认为这应该有助于你制定解决方案


编辑:问题中的代码已在中编辑。

解决此问题的方法是使用注释@EmbeddedId@JoinColumn

我最近做的一个项目需要一个类似的解决方案。我想如果我用例子来解释它会更容易:

我有三个对象,一个
平台
,一个
EventMaster
和一个
成员

  • 会员身份是您的客户在这种情况下,它有两个PK,即平台ID和EventMaster ID(这由
    @EmbeddedID
    解决):

  • MembershipKey
    类仅由另一个类的两个PK组成:

    @ManyToOne
    @JoinColumn(name = "eventmaster_id")
    private EventMaster eventMaster;
    
    @ManyToOne
    @JoinColumn(name = "mosplatform_id")
    private MOSPlatform platform;
    
  • Platform
    EventMaster
    类看起来都一样(这在
    Platform
    类中):

    @OneToMany(mappedBy=“id.platform”)
    私人名单成员资格;
    
我认为这应该有助于你制定解决方案


编辑:问题中的代码是在中编辑的。

EDIT:编辑清楚了。您到底想要实现什么?您想要一个查询来连接它们,还是想要创建一个@JoinTable,或者您只是想找到一种方法使此关系在JPA中工作?问题对meDid来说不清楚您编写实体了吗?正在寻找要在其中工作的关系吗JPA和@Join注解。是的,我已经把实体做了。编辑:编辑清楚了。你到底想要实现什么?你想要一个查询来连接它们,还是想要创建一个@JoinTable,或者你只是想找到一种方法使这个关系在JPA中工作?问题对meDid来说不清楚你写实体了吗?寻找关系吗使用@Join annotations在JPA中工作。是的,我已经创建了实体。->这是否允许您也加入平台和Eventmaster?我不确定这是否适用于我。基本上,我想加入客户和数据。但是FK之一(公司id)我在数据中需要的是在区域中。因此,相反,区域id的FK在数据中,然后保存Customer复合键所需的第二个FK。我知道了,类是如何链接的?我是指OneToOne、OneToMany等。我添加了上面的实体。这是基于遗留SQL数据库的。我的想法是甚至不加入CustomColumnDataCust你在上面编辑的对象已经正确链接了,不是吗?在我看来,其他一切都应该通过查询来完成。编辑:我的意思是,你需要的所有@Join注释都已经存在了。->这允许你加入吗平台和Eventmaster?我不确定这是否适合我。基本上我想加入客户和数据。但FK的一个(公司id)我在数据中需要的是在区域中。因此,相反,区域id的FK在数据中,然后保存Customer复合键所需的第二个FK。我知道了,类是如何链接的?我是指OneToOne、OneToMany等。我添加了上面的实体。这是基于遗留SQL数据库的。我的想法是甚至不加入CustomColumnDataCustomer给客户,并通过查询获取我需要的对象您在上面编辑的对象已经正确链接,这不是您遇到的问题吗?在我看来,所有其他事情都应该通过查询来完成。编辑:我的意思是,您需要的所有@Join注释都已经存在。