在Spring实体中模拟LEFT JOIN



实际上,我要做的是。。。

SELECT a.*, b.description, c.description FROM a 
LEFT JOIN b ON b.code = a.b_code
LEFT JOIN c ON c.code = a.c_code

我想完全使用Spring/JPA框架来映射这一点。我玩过@SecondaryTable,结果发现它在这种情况下不起作用,而且我在尝试使用@OneToOne或@JoinColumn映射它时遇到了很多错误。以下是我当前的实体类。。。

@Entity
@Table(name = "a")
public class a {
@Id
@Column(name = "id")
private String id;
@Column(name = "b_code")
private String bCode;
//I'd like to have b.description here
@Column(name = "c_code")
private String cCode;
//I'd like to have c.description here
}
@Entity
@Table(name = "b")
public class b {
@Column(name = "code")
private String code;
@Column(name = "description")
private String description;
}
@Entity
@Table(name = "c")
public class c {
@Column(name = "code")
private String code;
@Column(name = "description")
private String description;
}

您需要将@JoinColumnreferencedColumnName一起使用,如下所示。

@Entity
@Table(name = "a")
public class a {
@Id
@Column(name = "id")
private String id;
@Column(name = "b_code")
private String bCode;
//I'd like to have b.description here
@Column(name = "c_code")
private String cCode;
//I'd like to have c.description here

@OneToOne // this should be based on your joining
@JoinColumn(name = "b_code", referencedColumnName = "code", insertable = false, updatable = false)
B b;

@OneToOne// this should be based on your joining
@JoinColumn(name = "c_code", referencedColumnName = "code", insertable = false, updatable = false)
C c;
}
@Entity
@Table(name = "b")
public class B {
@Column(name = "code")
private String code;
@Column(name = "description")
private String description;
}
@Entity
@Table(name = "c")
public class C {
@Column(name = "code")
private String code;
@Column(name = "description")
private String description;
}

最新更新