Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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 使用@OrderBy时JPA@ManyToMany排序失败_Java_Hibernate_Jpa - Fatal编程技术网

Java 使用@OrderBy时JPA@ManyToMany排序失败

Java 使用@OrderBy时JPA@ManyToMany排序失败,java,hibernate,jpa,Java,Hibernate,Jpa,当JPA尝试选择AdmUser实体时,我有sql错误: ERROR: column locations1_.name does not exist. 我的实体有什么问题吗?我的AdmUser实体: @Entity @Table(name = "ADM_USERS") @SequenceGenerator(name = "ADM_USER_SEQ", sequenceName = "ADM_USER_SEQ", allocationSize = 1) public class AdmUser

当JPA尝试选择AdmUser实体时,我有sql错误:

ERROR: column locations1_.name does not exist. 
我的实体有什么问题吗?我的AdmUser实体:

@Entity
@Table(name = "ADM_USERS")
@SequenceGenerator(name = "ADM_USER_SEQ", sequenceName = "ADM_USER_SEQ", allocationSize = 1)
public class AdmUser implements EntityInt, Serializable {

    private static final long serialVersionUID = 786L;

    @Id
    @Column(nullable = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ADM_USER_SEQ")
    private Long id;
(...)
    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(name = "loc_locations_adm_users", joinColumns = @JoinColumn(name = "id_user", referencedColumnName="id"), 
                inverseJoinColumns = @JoinColumn(name = "id_location"))
    @OrderBy("name")
    private Set<LocLocation>        locations;
(...)
}

排序依据指向
locations1.name
,但应为
loclocation2.name
。我的实体有什么问题吗?

在该字段的一侧有一个集合。因此,没有“排序”(除了hashCode()GVE之外)。如果您想要排序,请使用列表(这是Java,实际上与JPA无关)


在M-N的非所有者侧,您似乎也缺少了一个“mappedBy”。

@OrderBy
可以很好地与许多人配合使用。还有我在问题中提供的结构。问题是我的查询,JPA没有处理它。对不起。

不是真的,因为在其他地方我已经设置和订购工作正常。这个问题是由JPA查询产生的,即使我尝试在SQL编辑器中执行这个查询,我也会遇到相同的错误:错误:column locations1_u2;name不存在,我知道简单哈希集没有顺序。所以,我想知道为什么在其他情况下,它是正确的排序。无论如何,即使更改为列表-错误也是一样的。请注意我对答案的更新。。。mappedBy失踪了?此外,当连接表是M-N时,您只需要从一侧定义连接表。这是不正确的。Hibernate将在需要时使用SortedSet实现。在双向M-N关系上需要一个mappedBy。不知道这意味着什么“问题是我的查询”。您未在问题中提供查询。我未提供查询,因为查询未指向AdmUser实体。JPA在选择连接数据时动态加载了它。我后来注意到,在直接选择AdmUser时,OrderBy可以正常工作。很抱歉
@Entity
@Table(name = "loc_locations", schema = "public")
@SequenceGenerator(name = "LOC_LOCATIONS_SEQ", sequenceName = "LOC_LOCATIONS_SEQ", allocationSize = 1)
public class LocLocation implements EntityInt, java.io.Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id", unique = true, nullable = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "LOC_LOCATIONS_SEQ")
    private Long id;

    @Column(nullable = false, unique = true, length = 200)
    private String name;
(...)

    @ManyToMany(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, mappedBy="locations")
    private List<AdmUser>       users;
}
 select
  admuser0_.id as id1_2_0_,
  admuser0_.actived as actived2_2_0_,
  admuser0_.admin as admin3_2_0_,
  admuser0_.allow_ip as allow_ip4_2_0_,
  admuser0_.created as created5_2_0_,
  admuser0_.deleted as deleted6_2_0_,
  admuser0_.id_domain as id_doma16_2_0_,
  admuser0_.email as email7_2_0_,
  admuser0_.language as language8_2_0_,
  admuser0_.login as login9_2_0_,
  admuser0_.name as name10_2_0_,
  admuser0_.passwd as passwd11_2_0_,
  admuser0_.phone as phone12_2_0_,
  admuser0_.picture as picture13_2_0_,
  admuser0_.surname as surname14_2_0_,
  admuser0_.theme as theme15_2_0_,
  locations1_.id_user as id_user1_2_1_,
  loclocatio2_.id as id_locat2_6_1_,
  loclocatio2_.id as id1_17_2_,
  loclocatio2_.description as descript2_17_2_,
  loclocatio2_.name as name3_17_2_
  from
        public.ADM_USERS admuser0_
   left outer join
        public.loc_locations_adm_users locations1_
            on admuser0_.id=locations1_.id_user
   left outer join
        public.loc_locations loclocatio2_
            on locations1_.id_location=loclocatio2_.id
   where
        admuser0_.id=1
   order by
        locations1_.name