使用鉴别符值查询数据库

时间:2019-05-17 16:01:22

标签: hibernate spring-boot inheritance spring-data-jpa single-table-inheritance

我正在使用单表继承策略。我想通过使用鉴别符类型对其进行过滤来在数据库中执行搜索。我该如何在JPA中编写函数来执行此操作。

使用Console.WriteLine(testobject.initialTwin.tags.abcd); 方法定义方法的常规方法不会产生结果。

这是我的父母班

findBy...

这是两个子实体

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
        name="Leave_Type",
        discriminatorType=DiscriminatorType.STRING
        )
public class LeaveQuota {
// the fields and the required methods
}

我想通过分别过滤年假和临时假来查询数据库。这意味着当我搜索年假时,应检索区分值列中所有值为“ annual”的记录。我该如何实施。 预先感谢!

1 个答案:

答案 0 :(得分:1)

为AnnualLeave.java创建存储库,即AnnualLeaveRepo.java和CausualLeave.java,如下所示:

AnnualLeaveRepo.java

@Repository
public interface AnnualLeaveRepo extends JpaRepository<AnnualLeave,Integer>   {

    @Query("from AnnualLeave")
    public List<AnnualLeave> getLeaves();

    //consider noOfLeave is member of AnnualLeave.java class
    public List<AnnualLeave> findByNoOfLeave(int noOfLeave); 

}

CausalLeaveRepo.java

@Repository
public interface CausalLeaveRepo extends JpaRepository<CausalLeave,Integer>   {

    @Query("from CausalLeave")
    public List<CausalLeave> getLeaves();
}

现在,当您使用 findAll() getLeaves() findByNoOfLeave(int)方法或任何其他自定义抽象方法时类的,它将自动使用 Leave_Type =“ Annual” 过滤结果。

类似,当您使用 CausalLeaveRepo findAll() getLeaves()方法或任何其他自定义抽象方法时, strong>类,它将使用 Leave_Type =“ Causal” 自动过滤结果。

您不必显式过滤掉。

注释 如果您的类中具有与LeaveQuota实体或其继承实体具有关系(@OneToMany等。)的任何属性,则不要忘记在这些属性上使用@JsonIgnore批注。否则,您将得到一个stackoverflow错误