私は spring-boot を使用した JPA の新しいユーザーなので、この質問は非常に素朴に見えるかもしれません。私は2つの非常に単純なエンティティを持っています:
@Entity
@Table(name="RATEPLAN")
public class RatePlan implements Serializable {
@Id
@GeneratedValue
@Column(name="RPCODE")
private Long id;
@Column(name="DESCRIPTION",nullable = false)
private String name;
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinTable(
name="RPSP",
joinColumns = @JoinColumn( name="RPCODE"),
inverseJoinColumns = @JoinColumn( name="SPCODE")
)
private List<ServicePackage> servicePackages;
と
@Entity
@Table(name="SERVICEPACKAGE")
public class ServicePackage {
@Id
@GeneratedValue
@Column(name="SPCODE")
private long id;
public long getId() {
return id;
}
私が探している動作は、少なくとも 1 つのサービス パッケージを含むすべての RatePlan を、FetchAll() プリミティブを使用して SQL の単純な JOIN としてフェッチすることです。
Hibernate によって生成された SQL を出力すると、最初にすべての RatePlan がフェッチされ、次に各 RatePlan について関連する ServicePackage が検索されます。その結果、サービス パッケージが関連付けられていない料金プランが表示されます。これは望ましくありません。(選択外部結合を使用したかのように)。
サービス パッケージ クラスに ratePlan (ManyToOne) の参照を挿入すると、問題を解決できることがわかりました。しかし、ここでオブジェクトを複製する意味はありません。別の解決策はありますか?
ありがとう。