Основной вопрос:
Если у меня есть сущность B с полем ManyToOne x, связанная с другой сущностью A, как мне получить все экземпляры B, которые имеют A в своем поле x?
Более конкретно:
Рассмотрим следующие аспекты:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private Key id;
@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL)
private List<Message> messages;
}
ic class Message {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column (name="MESSAGE_ID")
private Key id;
@ManyToOne(fetch = FetchType.LAZY)
private User owner;
private int status;
}
Я уже подготовил этот запрос
Query query = em.createQuery("SELECT m from Message m WHERE m.owner = :us");
Вот API для метода, который я хочу построить:
Ввод: Пользователь u, Состояние s
Вывод: Список всех сообщений с владельцем u и статусом s.
Я знаю, что должен создать запрос, используя EntityMenager, но каков правильный синтаксис? Что я помещаю в часть (* "ВЫБЕРИТЕ m ИЗ сообщения m, ГДЕ владелец = _ AND status =" + status *).
когда я попробовал это:
Query query = em.createQuery("SELECT m from Message m "
+"WHERE m.owner.id = :ownerId");
Я получил следующую ошибку:
javax.persistence.PersistenceException:
SELECT FROM Message m WHERE m.owner.username = :ownerID:
Can only reference properties of a sub-object if the sub-object is embedded.
Заранее спасибо ....