我是JPA的新用户,使用spring-boot,所以这个问题看起来很天真。 我有两个非常简单的实体:
@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()原语在SQL中将包含至少一个servicepackage的所有RatePlan作为一个简单的JOIN获取。
当我打印Hibernate生成的SQL时,首先它获取所有RatePlan,然后为每个rateplan查找关联的ServicePackage。 结果是我得到的费率计划没有任何关联的服务包,这是我不想要的。 (好像我使用了一个选择外连接)。
我看到在Service Package类中插入ratePlan(ManyToOne)的引用可以解决问题。但我在这里看不到任何重复对象的意义。你有其他解决方案吗?
感谢。
答案 0 :(得分:0)
您需要执行此操作以过滤掉空的服务包。
Query query = session.createQuery("from RatePlan plan fetch all properties where plan.servicePackages is not empty");