【问题标题】:Validate minimum length of parameter in Spring Jpa Query在 Spring Jpa Query 中验证参数的最小长度
【发布时间】:2019-01-29 09:11:28
【问题描述】:

我们有一个数据对象 Foo,它有一个字符串属性 Bar,还有一个 jpa 存储库,它有一个通过 Bar 查找 Foo 的方法:

@Entity
@Table(name = "FOO")
public class Foo {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "BAR", length = 16, nullable = false)
    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }
}


public interface FooJpaRepository extends JpaRepository<Foo, Long> {

    @Transactional(propagation = Propagation.REQUIRED, readOnly = true)
    List<Foo> findByBar(String bar);
}

此查询在多个地方使用。

我们现在希望在保存到数据库之前对 bar 的值进行哈希处理,这会增加字段的长度。我将在 Foo 类中添加一个@PrePersist 方法,以在保存之前检查 bar 的长度。但是,我还想检查findByBar 方法中 bar 参数的长度,以便当在其他地方使用它时,其他开发人员会被提醒他们使用的是未散列值而不是散列值。

如果不创建 JpaRepository 的实现,这可能吗?

【问题讨论】:

    标签: java validation spring-data-jpa


    【解决方案1】:

    如果您使用的是 Spring Boot,则可以使用验证:

    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-validation

    首先使用 @Validate 注释 repo,然后在方法参数上使用任何 Bean Validation Annotation。

    例如:

    @Validate
    public interface FooJpaRepository extends JpaRepository<Foo, Long> {
    
        @Transactional(propagation = Propagation.REQUIRED, readOnly = true)
        List<Foo> findByBar(@Size(max = 16) String bar);
    }
    

    【讨论】:

    • 感谢指点!该功能是否仅适用于弹簧靴?我们目前没有使用它。
    • 我不知道。试试看吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多