我有一个类似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
}
我想使用namedquery getForUsers时遇到一些问题:
org.hibernate.HibernateException:命名查询中的错误: getForUsers失败,原因是:org.hibernate.QueryException:意外的字符:'@'[从MyObject中选择n个WHERE用户@>:users]
但是当我在pgAdmin中编写它时,它运行良好。我该怎么办?
提前致谢。
-编辑-
我认为找到了一种做我想要的方法的方法,我这样修改对象:
@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和users列。 感谢@Victor Gubin提供的链接,我不知道“成员”
答案 0 :(得分:0)
我的编辑不允许删除或更新(ElementCollection),因此在初始状态下,此方法有效:
@NamedNativeQueries({
@NamedNativeQuery(name="getForUser", query = "SELECT * FROM mytable n WHERE n.users @> ?1 ", resultClass=MyObject.class)
})