2014-10-08 2 views
0

Когда JPA пытается выбрать AdmUser объект У меня есть SQL ошибка:JPA @ManyToMany отказ заказа с использованием @OrderBy

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; 
(...) 
} 

Мой LocLocation Entity:

@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; 
} 

А теперь - когда JPA пытается выбрать AdmUser объект У меня есть SQL ошибка. Запрос генерируется JPA выглядит, что:

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 

заказ по точкам на locations1_.name, но должно быть loclocatio2_.name. У меня что-то не так с моими сущностями?

ответ

0

@OrderBy отлично работает с ManyToMany. Также со структурой, которую я представил в моем вопросе. Проблема заключалась в моем запросе, и JPA с этим не справлялась. Сожалею.

+0

Не знаю, что это значит, «проблема была в моем запросе». Вы не задали вопрос в вопросе. –

+0

Я не предоставлял запрос, потому что запрос не указывает на AdmUser. Он был загружен динамически JPA при выборе подключенных данных. Я заметил позже, что при выборе AdmUser напрямую - OrderBy работает правильно. Извините. – robson

0

У вас есть Сетка на одной стороне для этого поля. Следовательно, нет «упорядочения» (кроме того, что hashCode() gves). Используйте List, если вы хотите упорядочить (это Java, не имеет никакого отношения к JPA).

Вы также, кажется, не видите «mappedBy» на стороне, не являющейся владельцем этого M-N.

+0

Не совсем, потому что в другом месте я правильно настроил и заказываю. Проблема возникает в результате запроса JPA, который я даже пытаюсь выполнить в редакторе SQL. У меня такая же ошибка: ERROR: column locations1_.name не существует – robson

+0

Да, я знаю, что простой HashSet не имеет порядка. Поэтому мне интересно, почему в других случаях он правильно сортируется. Во всяком случае, даже изменение в List - ошибка одинакова. – robson

+0

Обратите внимание на мое обновление ответа ... mappedBy отсутствует? Также вам нужно только определить таблицу соединений с одной стороны, когда это MN –