使用Date属性创建自定义spring JPA查询

时间:2018-02-22 17:52:31

标签: java spring postgresql date jpa

这是我的第一个Java Spring项目。我正在使用PostgreSQL来存储WorkedDay实体,如下所示:

@Entity
@Table
public class WorkedDay {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date weekDay;

    @Column
    private Long employeeId;

    @ManyToOne
    @PrimaryKeyJoinColumn(name = "employeeId", referencedColumnName = "id")
    private Employee employee;

    @OneToMany
    private List<WorkedHours> workedHours = new ArrayList<>();
}

所有“WorkedDays”都使用扩展WorkedDayRepository的{​​{1}}类存储在PostgreSQL表中。我还创建了一个报告服务,它应该返回给定月份中CrudRepository的列表。

WorkedDays

我目前在创建此自定义查询时遇到问题,因为我需要从表中检索具有特定月份的所有public class WorkedDayRepositoryImpl implements WorkedDayRepositoryCustom { public List<WorkedDay> getReportByMonthValue(int monthValue) { //service code implementation here } } 属性,并作为参数传递。

我对Spring JPA缺乏经验。有更好(或更简单)的方法吗?我尝试使用规范和Querydsl但失败了。

2 个答案:

答案 0 :(得分:0)

这应该有效

@Repository
public interface WorkedDayRepository extends CrudRepository<WorkedDay> {

   List<WorkedDay> findByWeekDay_Month(int month)

}

答案 1 :(得分:0)

您可以与@Query功能结合使用MONTH

@Repository
public interface WorkedDayRepository extends CrudRepository<WorkedDay> {

   @Query("select w from WorkedDay w where MONTH(w.weekDay) = ?1")
   List<WorkedDay> findByWeekDay(int month)

}

请记住,并非所有数据库都支持MONTH()。否则,您可以使用SUBSTRING(w.weekDay,6,7)