【问题标题】:Filter one-to-many children while requesting parent Entity with HSQL使用 HSQL 请求父实体时过滤一对多子实体
【发布时间】:2019-12-30 17:41:34
【问题描述】:

你好,这是我的模特

@Entity
public class Group {

    @Id
    @GeneratedValue
    private Long id;


    @OneToMany(
        cascade = CascadeType.ALL
    )
    private List<User> users;

    //Constructors, getters and setters removed for brevity
}

@Entity
public class User{

    @Id
    @GeneratedValue
    private Long id;

    private boolean valid;


    //Constructors, getters and setters removed for brevity
}

是否可以发出 HSQL 请求以按 id 选择组,但保留在用户列表中,只有在“有效”字段中具有“真”的用户?

【问题讨论】:

  • 您在哪个框架中编写查询意味着 hibernate/eclipselink/jdbctemplate 等或使用 JPA EntityManager。

标签: java sql spring hibernate jpa


【解决方案1】:

如果你想使用 HSQL 返回 JPA 实体树(简单的方法),答案是否定的。 不过,你可以这样写:

select g from Group g
left join g.users u with u.valid = true
where g.id = 123

您的users 集合不会被初始化。如果在连接中添加fetch 关键字,则会出现错误:

QuerySyntaxException:在获取的关联上不允许使用 with 子句;使用过滤器

这会引导您找到其他解决方案,using annotation @Filter。但是您需要启用过滤器,然后在打开过滤器(集合同步)的情况下更新读取的实体时遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多