Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Java JPA";与ID类属性xxxxxxx匹配的属性的类型int“不正确;_Java_Jpa_Foreign Key Relationship_Composite Primary Key - Fatal编程技术网

Java JPA";与ID类属性xxxxxxx匹配的属性的类型int“不正确;

Java JPA";与ID类属性xxxxxxx匹配的属性的类型int“不正确;,java,jpa,foreign-key-relationship,composite-primary-key,Java,Jpa,Foreign Key Relationship,Composite Primary Key,我有一个Java实体类“Portfolio.Java”,它有一个复合主键(Portfolio\u id,Portfolio\u name)。我使用@IdClass创建复合主键。这两个是类中唯一的实例 我有另一个类“Application.java”,也有复合主键(Application\u id,portfolio\u id)。我再次使用@IdClass创建复合主键 现在,application_id是“application.java”类的实例,而portfolio_id是“portfolio

我有一个Java实体类“Portfolio.Java”,它有一个复合主键(Portfolio\u id,Portfolio\u name)。我使用@IdClass创建复合主键。这两个是类中唯一的实例

我有另一个类“Application.java”,也有复合主键(Application\u id,portfolio\u id)。我再次使用@IdClass创建复合主键

现在,application_id是“application.java”类的实例,而portfolio_id是“portfolio.java”类中对应实例的外键

有人知道如何用Java实现这个吗

我试着做了以下几件事

PortfolioPK.java:

import java.io.Serializable;

public class PortfolioPK implements Serializable {

public int portfolio_id;
public int portfolio_name;

public PortfolioPK() {
    super();
}

@Override
public boolean equals(Object obj) {
    return super.equals(obj);
}

@Override
public int hashCode() {
    return super.hashCode();
}

.....
}
Portfolio.java:

@Entity
@IdClass(PortfolioPK.class)
public class Portfolio {

@Id
private int portfolio_id;
@Id
private int portfolio_name;

.....
}
ApplicationPK.java

import java.io.Serializable;

public class ApplicationPK  implements Serializable {

public int application_id;
public int portfolio_id;
public int portfolio_name;

public ApplicationPK() {
    super();
}

@Override
public boolean equals(Object obj) {
    return super.equals(obj);
}

.....
}
@Entity
@IdClass(ApplicationPK.class)
public class Application {

@Id
private int application_id;
private String application_name;
private String app_properties;

@Id
@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="portfolio_id", referencedColumnName="portfolio_id")
private Portfolio portfolio_id;

.....
}
Application.java

import java.io.Serializable;

public class ApplicationPK  implements Serializable {

public int application_id;
public int portfolio_id;
public int portfolio_name;

public ApplicationPK() {
    super();
}

@Override
public boolean equals(Object obj) {
    return super.equals(obj);
}

.....
}
@Entity
@IdClass(ApplicationPK.class)
public class Application {

@Id
private int application_id;
private String application_name;
private String app_properties;

@Id
@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="portfolio_id", referencedColumnName="portfolio_id")
private Portfolio portfolio_id;

.....
}
所以,现在我在“Application.java”中的@IdClass声明中得到一个错误。错误是,“与ID类属性portfolio\u ID匹配的属性没有正确的int类型”

这是正确的实现吗?还是应该用另一种方式

谢谢你的帮助!:)

这是一个“派生身份”
投资组合的ID
应用程序的ID的一部分,它们之间存在多对一关系。要正确映射,您需要在
ApplicationPK
中使用与
Application
中的关系属性同名的
PortfolioPK
类型的属性。因此:

@Entity
@IdClass(ApplicationPK.class)
public class Application {

    @Id
    private int application_id;
    // No fields referring to Portfolio ID fields

    @Id
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="portfolio_id", referencedColumnName="portfolio_id")
    private Portfolio portfolio; // name it simply "portfolio"

    // ...
}

public class ApplicationPK  implements Serializable {

    public int application_id; // name matches the field in Application
    public PortfolioPK portfolio; // name matches the relationship field in Application

    // ...
}
有关更多详细信息和示例,请参见的“2.4.1与派生标识相对应的主键”一节(示例2就是您的情况)。

应用程序字段“portfolio_id”应称为“portfolio”,并应具有2列(因为您必须使用2列id来引用投资组合)