满足条件如何加入实体?

Posted

技术标签:

【中文标题】满足条件如何加入实体?【英文标题】:How to join entities when satisfied conditions? 【发布时间】:2017-10-06 10:03:20 【问题描述】:

我正在尝试将 Hibernate 与 Spring Boot 一起使用。我也是使用 Hibernate 的新手。

我想在userUid 给定后加入两个表。

我的表如上。

StoreBranch 表

storeBranchUid |分行名 | ...

StoreBranchFavorite

storeSectionFavoriteUid | storeBranchUid |用户名

当给定userUid时,

我要实现这个SQL,

SELECT ... 
FROM StoreBranch 
JOIN StoreBranchFavorite 
ON StoreBranch.storeBranchUid = StoreBranchFavorite.storeBranchUid 
AND userUid = :userUid

我阅读了查询查找策略,但我认为没有办法实现这一点。

我应该使用命名查询还是其他方式?

public interface StoreBranchDao extends CrudRepository<StoreBranch, Long> 

    List<StoreBranch> findBystoreBranchUid(int storeBranchUid);
    // I want to find user's favorite branch when userUid has given.
    List<StoreBranch> findByUserUid(Long userUid); 


public class StoreBranch 

    @Id
    private int storeBranchUid;

    @NotNull
    private String branchName;

    private String breakfastOpen;
    private String breakfastClose;
    private String lunchOpen;
    private String lunchClose;
    private String dinnerOpen;
    private String dinnerClose;

    // join the table when the userUid has given
    @OneToMany
    @JoinColumn(name="storeBranchUid", referencedColumnName="storeBranchUid")
    private StoreBranchFavorite favorite;



public class StoreBranchFavorite 
    @Id
    private int storeSectionFavoriteUid;
    @NotNull
    private long userUid;


【问题讨论】:

您确实需要学习 Hibernate/JPA 的基础知识。阅读官方手册,了解关联和 JPQL 查询。您不应该存储其他实体的 ID。相反,您应该定义它们之间的关联。 【参考方案1】:

您可以使用@Query 将其归档,这是doc 您的查询将:

@Query("select s from StoreBranch s join s.favorite f where  f.userUid = :userUid")
  List<T> findAllAttribute(@Param("userUid")  Long userUid);

在您的 StoreBranch 中,您还提到了 @OneToMany 与 StoreBranchFavorite 的关系

 @OneToMany
    @JoinColumn(name="storeBranchUid", referencedColumnName="storeBranchUid")
    private StoreBranchFavorite favorite;

@OneToMany表示collection不是关联,所以不要关联StoreBranchFavorite,而是使用StoreBranchFavorite的collection(e.g List, Set)。

e.g:
 private List<StoreBranchFavorite> favorites;

【讨论】:

以上是关于满足条件如何加入实体?的主要内容,如果未能解决你的问题,请参考以下文章

仅在满足父模型的给定条件时如何获取模型关系

mysql 条件满足就抓一行,不满足就抓另一个

NSFetchedResultsController 仅将 NSSortDescriptor 应用于满足特定条件的条目?

NSPredicate 用于检查与其他变量匹配的 CoreData 属性是不是满足条件

CSV文件操作,PHP如何对满足条件的二维数组进行求和

如何知道 WHERE 语句中有多少条件满足其条件?