java 使用休眠 SQLQuery 获取多个列
java get several columns with hibernate SQLQuery
我正在使用 SQLQuery select 使用休眠从数据库中获取一些数据。
当尝试 select * 它有效但当只需要几列时它 returns:Invalid 列名
搜索了有关此问题的其他主题,但没有帮助;
这是我的代码:
User.java 声明变量的位置:
public class 用户实现 Serializable {
private static final long serialVersionUID = -1798070786993154676L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence")
@Column(name = "ID", unique = true, nullable = false)
@SequenceGenerator(name = "id_Sequence", sequenceName = "ID_SEQ")
private Integer id;
@Column(name = "FIRST_NAME", unique = false, nullable = false, length = 100)
private String firstname;
@Column(name = "LAST_NAME", unique = false, nullable = false, length = 100)
private String lastname;
@Column(name = "DATE_OB", unique = false, nullable = false, length = 100)
private String birthdate;
@Column(name = "DATE_OW", unique = false, nullable = false, length = 100)
private String startdate;
@Column(name = "DEPARTMENT", unique = false, nullable = false, length = 100)
private String department;
@Column(name = "POSITION", unique = false, nullable = false, length = 100)
private String position;
//有 getter 和 setter
尝试select的部分:
public static List<User> getAllUser()
{
List<User> result = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
String sql = "select first_name from employee";
SQLQuery query = session.createSQLQuery (sql).addEntity(User.class);
result = query.list();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
return result;
}
我想我不需要创建单独的休眠映射文件,因为它已经在用户 class 中完成了。
请帮忙看看是什么原因。
当您使用本机查询(在 JPA 世界中这样称呼)加载数据时,您可以在查询所有列时加载完整实体,即 SELECT * FROM foo
,或者您可以加载一个或多个单独的实体列,这会导致获得 Object[]
或某些特定类型(例如 String
)。
在这里,您试图将名字作为 User
实体加载,大概是希望其他字段留空。然而,这不是它的工作原理。您要么加载完整的实体,要么加载指定列值的数组。
像下面这样的东西应该可以工作
SQLQuery query = session.createSQLQuery(sql);
List<String> names = query.list();
这个对我有用:
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List first_names = query.list();
for (Object object : first_names)
{
System.out.println("User Details are========== " + object);
// or
Map map = (Map) object;
System.out.println("first_names : " + map.get("first_name"));
}
我正在使用 SQLQuery select 使用休眠从数据库中获取一些数据。 当尝试 select * 它有效但当只需要几列时它 returns:Invalid 列名 搜索了有关此问题的其他主题,但没有帮助; 这是我的代码:
User.java 声明变量的位置:
public class 用户实现 Serializable {
private static final long serialVersionUID = -1798070786993154676L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence")
@Column(name = "ID", unique = true, nullable = false)
@SequenceGenerator(name = "id_Sequence", sequenceName = "ID_SEQ")
private Integer id;
@Column(name = "FIRST_NAME", unique = false, nullable = false, length = 100)
private String firstname;
@Column(name = "LAST_NAME", unique = false, nullable = false, length = 100)
private String lastname;
@Column(name = "DATE_OB", unique = false, nullable = false, length = 100)
private String birthdate;
@Column(name = "DATE_OW", unique = false, nullable = false, length = 100)
private String startdate;
@Column(name = "DEPARTMENT", unique = false, nullable = false, length = 100)
private String department;
@Column(name = "POSITION", unique = false, nullable = false, length = 100)
private String position;
//有 getter 和 setter
尝试select的部分:
public static List<User> getAllUser()
{
List<User> result = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
String sql = "select first_name from employee";
SQLQuery query = session.createSQLQuery (sql).addEntity(User.class);
result = query.list();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
return result;
}
我想我不需要创建单独的休眠映射文件,因为它已经在用户 class 中完成了。 请帮忙看看是什么原因。
当您使用本机查询(在 JPA 世界中这样称呼)加载数据时,您可以在查询所有列时加载完整实体,即 SELECT * FROM foo
,或者您可以加载一个或多个单独的实体列,这会导致获得 Object[]
或某些特定类型(例如 String
)。
在这里,您试图将名字作为 User
实体加载,大概是希望其他字段留空。然而,这不是它的工作原理。您要么加载完整的实体,要么加载指定列值的数组。
像下面这样的东西应该可以工作
SQLQuery query = session.createSQLQuery(sql);
List<String> names = query.list();
这个对我有用:
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List first_names = query.list();
for (Object object : first_names)
{
System.out.println("User Details are========== " + object);
// or
Map map = (Map) object;
System.out.println("first_names : " + map.get("first_name"));
}