Java JPA";与ID类属性xxxxxxx匹配的属性的类型int“不正确;
我有一个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: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
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来引用投资组合)