我只是尝试通过用户名和密码从我的用户表加载我的用户。然而,用户的属性没有被初始化。我在映射文件中设置了 fetch="join"(急切加载)。这是我的查询:
SQLQuery q = session.createQuery("SELECT u.* FROM users WHERE username=? AND password=?);
q.setString(0, "valid_username");
q.setString(0, "valid_password");
List users = q.list();
我的用户的各种属性(例如部门、用户级别等)未正确初始化。
我的第二个查询:我只是尝试使用相同的方法从数据库获取票证列表
SQLQuery q = session.createQuery("SELECT t.* FROM tickets WHERE assignee_id=?);
q.setString(0, "valid_assignee_id");
List users = q.list();
同样的事情正在发生...我的票证字段(例如其状态、优先级等)未初始化。我再次为必要的映射文件设置了 fetch=join 属性。谁能指出我正确的方向,谢谢!!
编辑:下面是我的数据库结构和 pojo 文件供引用”
users table
-----------
u_id
username
password
salt
email
firstName
lastName
department_id
userlevel_id
tickets table
-------------
ticket_id
title
description
department_id
status_id
priority_id
assignee_id
creator_id
public class Ticket implements java.io.Serializable {
private Integer tickId;
private Department department;
private Status status;
private User creatorUser;
private User assignedUser;
private Priority priority;
private String title;
private String description;
private Set ticketNotes = new HashSet(0);
private Set attachments = new HashSet(0);
//Getters and setters
}
public class User implements java.io.Serializable {
private Integer UId;
private Department department;
private Userlevel userlevel;
private String username;
private String password;
private String salt;
private String email;
private String firstName;
private String lastName;
private Set createdTickets = new HashSet(0);
private Set assignedTickets = new HashSet(0);
public User() {
}
注意我使用的是 hibernate .hbm.xml 映射结构而不是注释。
最佳答案
我认为,这些都是正确的查询。您必须在查询中像这样定义对象(u,t)。它将获取表中的所有列
SELECT u FROM users u WHERE u.username=? AND u.password=?
和
SELECT t FROM tickets t WHERE t.assignee_id=?
是的,我同意卡蒂克的观点。参数值应该位于正确的位置
q.setString(0, "valid_username");
q.setString(1, "valid_password");
这也需要。
关于java - hibernate的sql查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24211852/