有没有人通过Hibernate成功地将PostgreSQL中的数值数组映射到java中的数值数组?
SQL:
CREATE TABLE sal_emp (name text, pay_by_quarter integer[]);
INSERT INTO sal_emp VALUES ('one', '{1,2,3}');
INSERT INTO sal_emp VALUES ('two', '{4,5,6}');
INSERT INTO sal_emp VALUES ('three', '{2,4,6}');
Run Code Online (Sandbox Code Playgroud)
制图:
<hibernate-mapping>
<class name="SalEmp" table="sal_emp">
<id name="name" />
<property name="payByQuarter" column="pay_by_quarter" />
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
类:
public class SalEmp implements Serializable{
private String name;
private Integer[] payByQuarter;
...// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
查询表格时出现异常.
我在使用hibernate 4.1.0映射的postgresql 9.3中使用数组类型时遇到了一个特定的问题.这种类型允许我拥有非常强大的数据模型,而无需构建大量的表和连接.
为了映射使用此特定类型存储的字段,我使用了UserType
无论如何,它适用于纯hibernate(hql),但我还需要将sql本机查询发送到我的数据库.当我这样做时,尽管尝试了很多次,但我还没有找到任何办法.
我尝试了很多基于此的语法
String[] values = {"value1", "value2"};
String queryString = "SELECT * FROM instances WHERE values && :values";
Query query = this.getSession().createSQLQuery(queryString).addEntity(Instance.class);
query.setParameterList("values", values);
query.list();
Run Code Online (Sandbox Code Playgroud)
我得到的运算符不存在:text [] &&字符变化
它应该在jdbc中给出以下语法:['value1','value2']并且它似乎给'value1'...
我试过很多语法
我需要发送本机查询,因为我使用Materialized View来提高性能.
我的SQL查询在postgresql控制台中有效.所以这是一个特定于hibernate的问题.
我喜欢上课
public User{
Long id;
Set<String> roles;
}
Run Code Online (Sandbox Code Playgroud)
如何查询User具有角色的所有对象"ADMIN"
编辑:
我正在使用Hibernate 3.0.5.并尝试了大多数明显的方法.
from Users where roles in('ADMIN')给出了JDBC错误.
from Users u where u.roles in('ADMIN')给出一个类强制转换异常
我认为这可能是这个特定版本的hibernate的一个问题.