ManyToOne with where子句

时间:2012-04-30 02:36:56

标签: hibernate jpa

我有一些逻辑删除的记录(即active=false)导致我的@ManyToOne映射出现问题,因为连接列返回了多个结果。

我只需要包含我认为可以实现active=true的记录:

@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "site_id", referencedColumnName = "site_id", insertable = false, updatable = false)
@WhereJoinTable(clause = "active=true")
private Site site;

然而,看起来hibernate没有使用WhereJoinTable(也许它只对OneToMany有效?)因为active=true没有出现在生成的SQL中(日志) )问题仍然存在。

是否可以为ManyToOne和如何连接包含where子句?

3 个答案:

答案 0 :(得分:3)

@ManyToOne不支持@WhereJoinTable。关于主题开放五年以来,存在错误HHH-4335。我不知道任何解决方法,除了使用错误报告中提到的视图(在只读访问的情况下)。

答案 1 :(得分:1)

@JoinColumnOrFormula anotation是一种合适的解决方法

答案 2 :(得分:0)

对我有用的解决方案是在类的顶部添加@where 注释,请参见下一个示例:

@Where(clause = "state_.idCity=0")
@SuppressWarnings("serial")
@Entity
@Table(name="city", schema="catalog")
@SequenceGenerator(name = "default_gen", sequenceName = "IDSERIEINVALIDO", allocationSize = 1)
public class Citye implements Serializable{
        
    @Id 
    private Long id;
}