0

我是使用 spring-boot 的 JPA 的新用户,所以这个问题可能看起来很幼稚。我有两个非常简单的实体:

@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;
}

我正在寻找的行为是我想使用 FetchAll() 原语获取包含至少一个服务包的所有 RatePlan 作为 SQL 中的简单 JOIN。

当我打印 Hibernate 生成的 SQL 时,首先它会获取所有 RatePlan,然后为每个 rateplan 查找关联的 ServicePackage。结果是我提供了没有任何相关服务包的费率计划,这是我不想要的。(好像我使用了选择外连接)。

我看到在服务包类中插入 ratePlan (ManyToOne) 的引用可以解决问题。但我认为在这里复制对象没有任何意义。你有其他解决方案吗?

谢谢。

4

1 回答 1

0

您需要这样做以过滤掉空的服务包。

Query query = session.createQuery("from RatePlan plan  fetch all properties where plan.servicePackages is not empty");
于 2015-03-05T12:57:00.797 回答