Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 JPQL:日食和冬眠的区别_Java_Hibernate_Jpql - Fatal编程技术网

Java JPQL:日食和冬眠的区别

Java JPQL:日食和冬眠的区别,java,hibernate,jpql,Java,Hibernate,Jpql,我已经考虑过我的情况,没有找到合适的解决办法。经过一些额外的搜索,我想我知道了问题的根源,尽管我不知道如何解决它。如前所述,我已经: @Table(name = "role__parent") @IdClass(RoleAssociationKey.class) @Data public class RoleAssociation implements Serializable { @Id @JoinColumn(name = "has_parent_role_id")

我已经考虑过我的情况,没有找到合适的解决办法。经过一些额外的搜索,我想我知道了问题的根源,尽管我不知道如何解决它。如前所述,我已经:

@Table(name = "role__parent")
@IdClass(RoleAssociationKey.class)
@Data
public class RoleAssociation implements Serializable {

    @Id
    @JoinColumn(name = "has_parent_role_id")
    private Role node;

    @Id
    @JoinColumn(name = "is_parent_for_role_id")
    private Role parent;
    ...
}
@Data
class RoleAssociationKey implements Serializable {
    private static final long serialVersionUID = 1L;
    private int node;
    private int parent;
}
我有

@Table(name = "role")
@Data
public class Role implements IRole {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany(mappedBy = "node", orphanRemoval = true, cascade = { CascadeType.ALL })
    private List<RoleAssociation> parentRoles;
    ...
为了所有的父母。当我编译它时,Hibernate抱怨二进制逻辑运算符的左右两侧不兼容[integer:component[node,parent]]


由于该语句在EclipseLink中工作,因此我不知道如何将其更改为工作的Hibernate语句。非常感谢您的帮助。

经过一番努力,我终于找到了这个问题的根本原因。我知道SQL可能会得到改进,但我在其他类似的地方失败了

Hibernate要求为
@OneToMany
关系提供匹配对

在我的查询中,我指的是我的角色的父角色。解决办法是

@Data
public class RoleAssociation implements Serializable {

    @Id
    @JoinColumn(name = "has_parent_role_id")
    @ManyToOne // <<<<==== rerequired for Hibernate
    private Role node;

    @Id
    @JoinColumn(name = "is_parent_for_role_id")
    @ManyToOne // <<<<==== rerequired for Hibernate
    private Role parent;
@数据
公共类RoleAssociation实现可序列化{
@身份证
@JoinColumn(name=“has\u parent\u role\u id”)

@ManyToOne//RoleAssociationKey是什么样子的?我已经更新了qI。我知道,当您使用CriteriaBuilder并且有一个联接时,在Eclipselink中,联接也会进行提取,而在Hibernate中,您必须添加一个显式提取。我不知道这是否或如何与您的问题相关。@LeO-尝试更改为“从角色r中选择r加入r.parentRoles”然后指定过滤条件。可能是JPA规范的不同版本?可能是由于OneToMany中的mappedBy属性使其100%保证在另一端隐含了多通,因此在更现代的规范版本中,多通注释的必要性已经放松了clipseLink更为轻松,Hibernate的需求在技术上是正确的。
@Data
public class RoleAssociation implements Serializable {

    @Id
    @JoinColumn(name = "has_parent_role_id")
    @ManyToOne // <<<<==== rerequired for Hibernate
    private Role node;

    @Id
    @JoinColumn(name = "is_parent_for_role_id")
    @ManyToOne // <<<<==== rerequired for Hibernate
    private Role parent;