2014-06-13 4 views
0

Я просто пытаюсь загрузить своего пользователя из таблицы пользователей с помощью имени пользователя и пароля. Однако свойства пользователя не инициализируются. Я установил fetch = "join" (загруженная загрузка) в мои файлы сопоставления. Вот мой запрос:Проблемы с sql-запросом с hibernate

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 для необходимых файлов сопоставления. Может ли кто-нибудь указать мне в правильном направлении, спасибо!

Edit:. Ниже моя структура базы данных и файлы 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() { 
    } 

Примечание им с помощью структуры спящего режима отображения .hbm.xml и не аннотации

ответ

1

Я думаю, это все правильно queries.you должны определять свои объекты (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"); 

Это также необходимо.

0

Также необходимо указать правильное положение параметров в запросе. Вы установили значение параметра в положение 0. Именно по этой причине он не получает правильных данных.

q.setString (0, "valid_username");

q.setString (1, "valid_password");

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. Вы хотите получить все столбцы из псевдонимов u и r, но вы никогда не определить их в своих запросах, должны быть:

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

    или

    SELECT * FROM users WHERE username=? AND password=? 
    
Смежные вопросы