sql查询hibernate的问题

时间:2014-06-13 18:35:18

标签: java mysql sql hibernate

我只是想通过用户名和密码从我的用户表加载我的用户。但是,用户的属性未初始化。我在映射文件中设置了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映射结构而不是注释。

3 个答案:

答案 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)

您的查询存在一些问题:

  1. 您在查询结束时缺少收尾报价

    SQLQuery q = session.createQuery("SELECT u.* FROM users WHERE username=? AND password=?);
    

    应该是

    SQLQuery q = session.createQuery("SELECT u.* FROM users WHERE username=? AND password=?");
    
  2. 您想从别名ur中检索所有列,但您从未在查询中定义它们,应该是:

    SELECT u.* FROM users u WHERE username=? AND password=?
    

    SELECT * FROM users WHERE username=? AND password=?