我只是想通过用户名和密码从我的用户表加载我的用户。但是,用户的属性未初始化。我在映射文件中设置了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映射结构而不是注释。
答案 0 :(得分:1)
我认为,这些都是正确的查询。你必须在查询中定义你的对象(u,t)。它将获取表中的所有列
SELECT u FROM users u WHERE u.username=? AND u.password=?
和
SELECT t FROM tickets t WHERE t.assignee_id=?
是的,我同意kartik。参数值应位于正确的位置
q.setString(0, "valid_username");
q.setString(1, "valid_password");
这也需要。
答案 1 :(得分:0)
还需要在查询中提供正确的参数位置。您已将参数的值都设置为0位置。这就是它没有得到适当数据的原因。
q.setString(0,“valid_username”);
q.setString(1,“valid_password”);
答案 2 :(得分:0)
您的查询存在一些问题:
您在查询结束时缺少收尾报价
SQLQuery q = session.createQuery("SELECT u.* FROM users WHERE username=? AND password=?);
应该是
SQLQuery q = session.createQuery("SELECT u.* FROM users WHERE username=? AND password=?");
您想从别名u
和r
中检索所有列,但您从未在查询中定义它们,应该是:
SELECT u.* FROM users u WHERE username=? AND password=?
或
SELECT * FROM users WHERE username=? AND password=?