如何通过JPA查询按子类实体值获取父实体



我正试图通过查询通过子实体获取主父实体。我的实体如下所示。

主要母公司

@Entity
@Data
@EqualsAndHashCode(callSuper = true)
Public class Buyer{

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
List<Account> accounts;

}

账户类别

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Account{
}

帐户类在低于类的中继承

@Entity
@Data
@EqualsAndHashCode(callSuper = true)
@DiscriminatorValue("buyer1")
public class BuyerAccount1 extends Account {
@Column(unique = true)
private UUID buyerId;
}

我想获得Optional by resourceId present BuyerAccount1。我已经尝试了下面的JPA查询,但我得到了Optional.empty((的响应。

@Query("SELECT pb n" +
" FROM Buyer pb join pb.accounts a n" +
" WHERE  a.buyerId= :buyerId n" +
" AND type(a) = BuyerAccount1")
Optional<Buyer> findByBuyerAccount1(@Param("buyerId") UUID buyerId);

我在查询中遗漏了什么吗?

提前感谢!!

我建议您使用这样的查询:

@Query("SELECT pb n" +
" FROM Buyer pb n" +
" WHERE EXISTS (SELECT 1 FROM pb.accounts a WHERE a.buyerId = :buyerId)")
Optional<Buyer> findByBuyerAccount1(@Param("buyerId") UUID buyerId);

除此之外,如果您使用MySQL,则需要为UUID类型指定一个长度,因为它默认生成为binary(255),这将导致填充该值。使用@Column(length = 16)

最新更新