gpt4 book ai didi

java - Hibernate - 对具有枚举属性的 Bean 使用 native 查询和别名?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:59 25 4
gpt4 key购买 nike

我在 hibernate 中使用 native 查询来为包含枚举属性的 bean 起别名时遇到问题。调用 query.list() 时出现 InvocationTargetException。我的例子如下:

@Entity(name = "table1")
public class Class1 {
@Column(name = "col1")
@NotNull
private Integer prop1;

@Column(name = "col2")
@NotNull
private String prop2;

@Column(name = "col3", length = 6)
@Enumerated(value = EnumType.STRING)
private MyEnumType prop3;

// ... Getters/Setters...
}

public List getClass1List(){
String sql = "select col1 as prop1, col2 as prop2, col3 as prop3 from table1";

Session session = getSession(Boolean.FALSE);
SQLQuery query = session.createSQLQuery(sql);
query.addScalar("col1", Hibernate.INTEGER);
query.addScalar("col2", Hibernate.STRING);
query.addScalar("col3", Hibernate.STRING);

query.setResultTransformer(Transformers.aliasToBean(Class1.class));

return query.list();
}

在 query.addScalar("col3", Hibernate.STRING) 调用期间,我不知道要为 col3 使用什么类型(枚举类型)。 Hibernate.String 不工作!我也试图完全关闭类型 (query.addScalar("col3")),但我得到了相同的 InvocationTargetException。谁能帮我解决这个问题?我的模型无法更改,我只能使用 native sql 查询。任何想法表示赞赏。

最佳答案

// In public List getClass1List() method:
// 1. DEFINE:
Properties params = new Properties();
params.put("enumClass", "enumerators.MyEnumType");
params.put("type", "12");

// 2. REPLACE:
// query.addScalar("col3", Hibernate.STRING);
// X

query.addScalar("col3", Hibernate.custom(org.hibernate.type.EnumType.class, params));

关于java - Hibernate - 对具有枚举属性的 Bean 使用 native 查询和别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com