Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate过滤器的JPA等价物_Java_Spring_Hibernate_Security_Jpa - Fatal编程技术网

Java Hibernate过滤器的JPA等价物

Java Hibernate过滤器的JPA等价物,java,spring,hibernate,security,jpa,Java,Spring,Hibernate,Security,Jpa,JPA中是否存在与之相当的标准? 例如,可以使用以下hibernate注释来定义过滤器: @Entity @FilterDef(name="minLength", parameters=@ParamDef( name="minLength", type="integer" ) ) @Filters( { @Filter(name="betweenLength", condition=":minLength <= length and :maxLength >= length"

JPA中是否存在与之相当的标准? 例如,可以使用以下hibernate注释来定义过滤器:

@Entity
@FilterDef(name="minLength", parameters=@ParamDef( name="minLength", type="integer" ) )
@Filters( {
    @Filter(name="betweenLength", condition=":minLength <= length and :maxLength >= length"),
    @Filter(name="minLength", condition=":minLength <= length")
} )
public class Forest { ... }
或者可以覆盖以下方法:

org.hibernate.EmptyInterceptor.onPrepareStatement(String sql)
我发现有一些JPA事件回调和注释,例如@PostLoad。然而,在我的例子中,这些都不能使用,因为我需要一些东西来限制对基于用户角色的某些条件的实体的访问


有人知道如何使用JPA标准来实现吗

在我看来,您似乎正在尝试对实体对象执行验证。您有几个选项可以实现这一点

第一种方法是使用Java验证API及其关联的验证。这是JavaEE的推荐方法,JPA是其中的一部分。例如,您可以按如下方式编写实体类:

@Entity
class Person {
  @NotNull
  @Size(min = 5, Max = 50)
  String name;
}
现在,每次尝试持久化Person实例时,JPA提供者都会自动验证该实例,前提是类路径上有Java验证器。验证错误将作为运行时异常抛出,并可用于回滚事务。如果需要,还可以手动调用验证器,收集任何验证错误并将其转换为用户友好的消息


另一个可能不好的选项是使用JPA事件监听器,执行验证,并在验证失败时抛出异常。这将立即终止JPA操作并回滚所有事务。

我认为这个答案与问题无关。@km所问的是关于在读取数据时进行过滤的问题,而您正在引用以在写入数据时对其进行验证。答案的要点是JPA事件。JPA还提供了与读取相关的事件@PreLoad和@PostLoad,因此答案对于读取也是非常有效的。
@Entity
class Person {
  @NotNull
  @Size(min = 5, Max = 50)
  String name;
}