В приложении весны mvc у меня есть 3 таблицы базы данных (включая одну таблицу сопоставления) и их два соответствующих элемента java.Выберите запись, где id является идентификатором коллекции
Субъектами являются: -
public class User {
private Long id;
private String userName;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_location",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "location_id", referencedColumnName = "id")}
)
private Set<Location> location;
}
public class Location {
private Long id;
private String locationCode;
}
Три таблицы пользователей, местоположение и USER_LOCATION.
Я хочу выбрать пользователя, идентификатор местоположения которого соответствует определенному идентификатору. Поскольку пользователь может иметь несколько местоположений, я не уверен, как написать запрос на спящий режим для этого. Я попробовал несколько комбинаций ниже, но я либо получаю исключение,
illegal attempt to dereference collection [{synthetic-alias}{non-qualified-property-ref}] with element property reference [id]
или получить список объектов пользователя и местоположения. Я просто хочу список пользовательских объектов.
- от пользователя, где UserName =: имя пользователя и: locationId в (location.id)
- от пользователя внутренней присоединиться к user.location LOC, где user.username =: usersName и loc.id =: locationId
Update: Я попробовал запрос,
Query query = getCurrentSession().createQuery("from User user inner join user.location loc where user.userName = :usersName and loc.id = :locationId");
Hibernate генерирует следующий простой SQL сверху запрос и возвращает список объектов User и Location. Например, если есть одно место для пользователя, которое соответствует приведенному выше запросу, hibernate возвращает список, содержащий один объект User и один объект Location.
select
user0_.id as id1_18_0_,
location2_.id as id1_5_1_,
user0_.user_name as user_na11_18_0_,
location2_.location_code as location3_5_1_
from
users user0_
inner join
user_location location1_
on user0_.id=location1_.user_id
inner join
location location2_
on location1_.location_id=location2_.id
where
user0_.user_name=?
and location2_.id=?
Что вы имеете в виду список пользователей и размещения объектов? Не могли бы вы добавить свой запрос к сообщению? –
Здравствуйте, Орест, пожалуйста, ознакомьтесь с моим обновлением в ответ на ваш комментарий. Спасибо – ivish