У меня есть объект MyObject, подобный (я использую зависимость hibernate-array-contributor для управления массивом):
@Entity
@Table(name = "mytable")
@NamedQueries({
@NamedQuery(name = "findAll",
query = "SELECT n FROM mytable n"),
@NamedQuery(name = "getForUsers",
query = "SELECT n FROM mytable n WHERE users @> :users")
})
public class MyObject{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="title")
private String title;
@Column(name="users", columnDefinition="bigint array")
private Long[] users ;
//constructor, getters and setters
}
У меня возникает проблема, когда я хочу использовать именованный запрос getForUsers:
org.hibernate.HibernateException: ошибки в именованных запросах:
Ошибка getForUsers из-за: org.hibernate.QueryException: неожиданный символ: '@' [ВЫБРАТЬ n ИЗ MyObject n ГДЕ пользователи @>: пользователи]
Но когда я написал это в pgAdmin, он работал хорошо. Как я могу это сделать?
Заранее спасибо.
- EDIT -
Я думаю, что нашел способ делать то, что я хочу, я модифицирую свой объект так:
@Entity
@Table(name="mytable")
@NamedQueries({
@NamedQuery(name="findAll",query = "SELECT n FROM mytable n"),
@NamedQuery(name="getForUser", query = "SELECT n FROM mytable n WHERE :user MEMBER OF n.users")
})
public class MyObject{
@Id
@GeneratedValue(startegy = GenerationType.IDENTITY)
private long id;
@Column(name="title")
private String title;
@ElementCollection
private Set<Long> users = new HashSet<>();
//constructor, getters and setters
}
Это добавляет таблицу myobject_users, где есть myobject_id и столбцы пользователей.
Спасибо @Viktor Gubin за ссылки, которых я не знал "MEMBER OF"