我正试图通过查询通过子实体获取主父实体。我的实体如下所示。
主要母公司
@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)