【问题标题】:Spring Boot + Spring Data JPA query from java.util.Date type using only the month仅使用月份的 java.util.Date 类型的 Spring Boot + Spring Data JPA 查询
【发布时间】:2016-12-18 14:13:16
【问题描述】:

我正在使用 Spring Boot 1.4.0Spring Data JPA 1.10.2,但我发现自己陷入了创建这样的查询的僵局:

SELECT * FROM myDatabase
WHERE
MONTH(nascimento) = '11';

我的目标是列出当月的所有生日,字段为 sql 格式 year-month-day

在我的@Entity 中,我存储了一个java.util.Date 类型属性,名为nascimento

@Entity
public class Cliente {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @NotEmpty
    private String nome;

    @NotNull
    private Date nascimento;

    // Get/Set...
}

在我的 @Repository 中,我使用 Spring Data CrudRepository 接口。

@Repository
public interface ClienteRepository extends CrudRepository<Cliente, Integer> {
    // Methods...
}

有没有办法只使用 java Date 类型的属性月份来执行查询?

我想使用 Spring Data 框架支持的 Query methods 在关系 DBMS 之间创建可互操作的查询。

目前我用这种方法解决了这个问题(但我认为它并不适合所有数据库):

@Query(value = "SELECT * FROM Cliente WHERE MONTH(nascimento) like ?1", nativeQuery = true)
Iterable<Cliente> findAllByNascimentoLike(String Month);

想出解决方案,并在必要时使用月份和日期?
感谢您尝试帮助我。

【问题讨论】:

    标签: java mysql sql spring spring-data-jpa


    【解决方案1】:

    使用JPA Query Expressions这种语言是独立于数据库的。 JPA 查询表达式将类似于您的本机查询 (you may use function MONTH):

    @Query("SELECT u FROM Cliente u WHERE MONTH(u.nascimento) = ?1")
    Iterable<Cliente> findAllByNascimentoLike(Integer month);
    

    【讨论】:

    • 如果支持月份
    • 谢谢@pau-chorro,我试试这个,效果很好,MONTH() 时态函数需要Integer 属性。如果数据库不支持使用时间值的函数?
    • 试试Select u from Cliente u where SUBSTRING(u.nascimiento, 6, 7) = ?1
    猜你喜欢
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2016-06-22
    相关资源
    最近更新 更多