我的游戏中有一个休眠实体!由mysql数据库支持的项目和使用JPA的查询。
我现在想要做的是在我的应用程序中添加一个“存档”工具,就用户而言,删除该实体。
但是还有其他实体会引用它,所以我不能对实体进行删除,而且我希望能够从存档中恢复它。
但是我不希望它默认出现在列表或搜索中,但当然仍然需要能够在某些场合访问数据,例如当用户正在检查引用它的项目时。
有很多查询引用了实体,我可以为每个实例添加一个WHERE子句,但我也使用了一些内置的查询方法,比如findAll()。
我认为如果我能以某种方式默认添加where子句会更加清晰。
有没有办法做到这一点?
答案 0 :(得分:0)
您可以在实体上使用Hibernate @FilterDef和@Filter Annotations。 请参阅文档。 http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/filters.html
你可能还想为JPA插件创建一个拦截器/钩子,它可以在启动hibernate会话时自动启用你的过滤器......但是一开始,你的控制器中的@Before过滤器就可以了。
答案 1 :(得分:0)
您在这里有两种解决方案:
如果您使用的是Hibernate,则可以在实体bean上使用@Where(clause = "column to filer")
。
@Entity
@Where(clause = "isActive='false'")
public class Product {
//...
@Column
private Boolean isActive;
}
或者如果使用EclipseLink JPA实现,则使用@AdditionalCriteria("column to filer")
来定义数据的参数化视图。
@Entity
@AdditionalCriteria("isActive='false'")
public class Product {
//...
@Column
private Boolean isActive;
}
有关更多信息: