У меня есть приложение для управления пользователями, которое выделяет каждому пользователю команду и один или многие доступ к различным приложениям. Теперь для страницы отчетности я пытаюсь извлечь данные из двух таблиц (UserInfo UserAppAccess) с помощью Hibernate, но я не могу. Вот таблицы:Как получить данные из нескольких запросов таблицы с помощью hibernate?
Таблица 1 (UserInfo):
@Entity
@Table(name = "user_info", uniqueConstraints = { @UniqueConstraint(columnNames = "username"), @UniqueConstraint(columnNames = "email") })
public class UserInfo implements java.io.Serializable {
public enum UserStatus {
active, inactive
}
public enum UserType {
user, creator
}
private static final long serialVersionUID = 2650114334774359089L;
@Id
@Column(name = "id", unique = true, nullable = false, length = 100)
private String id;
@Column(name = "username", unique = true, nullable = false, length = 50)
private String username;
@Column(name = "password", nullable = false, length = 80)
private String password;
@Column(name = "status", nullable = false, length = 10)
@Enumerated(EnumType.STRING)
private UserStatus status;
@Column(name = "type", nullable = false, length = 10)
@Enumerated(EnumType.STRING)
private UserType type;
@Column(name = "phone", nullable = true, length = 30)
private String phone;
@Column(name = "email", nullable = true, length = 50)
private String email;
@Column(name = "first_name", nullable = true, length = 50)
private String firstName;
@Column(name = "last_name", nullable = true, length = 50)
private String lastName;
@Column(name = "login", nullable = true, length = 100)
private long login;
@Column(name = "alert", nullable= true, length=500)
private String alert;
@OneToOne
@JoinColumn(name = "team_id")
private Team team;
}
Таблица 2 (команды):
@Entity
@Table(name = "team", uniqueConstraints = { @UniqueConstraint(columnNames = "team_name"), @UniqueConstraint(columnNames = "team_code") })
public class Team implements java.io.Serializable {
private static final long serialVersionUID = 7933770163144650730L;
@Id
@Column(name = "id", unique = true, nullable = false, length = 80)
private String id;
@Column(name = "team_name", unique = true, nullable = false, length = 100)
private String name;
@Column(name = "team_code", unique = true, nullable = false, length = 10)
private String code;
}
Таблица 3 (Доступ):
@Entity
@Table(name = "access_def")
public class Access implements java.io.Serializable {
private static final long serialVersionUID = 7933770163144650730L;
@Id
@Column(name = "id", unique = true, nullable = false, length = 80)
private String id;
@Column(name = "access_name", unique = true, nullable = false, length = 100)
private String name;
@Column(name = "access_code", unique = true, nullable = false, length = 10)
private String code;
}
Таблица 4 (заявка):
@Entity
@Table(name = "application", uniqueConstraints = { @UniqueConstraint(columnNames = "name") })
public class Application implements java.io.Serializable {
private static final long serialVersionUID = 5803631085624275364L;
@Id
@Column(name = "name", nullable = false, length = 100)
private String name;
}
Таблица 5 (UserAppAccess):
@Entity
@Table(name = "user_app_access")
@Embeddable
public class UserAppAccess implements java.io.Serializable {
private static final long serialVersionUID = 7933770163144650730L;
@Id
@Column(name = "id", unique = true, nullable = false, length = 80)
private String id;
@OneToOne
@JoinColumn(name = "user_id")
private UserInfo userInfo;
@Column(name = "app_name", nullable = false, length = 100)
private String appName;
@OneToOne
@JoinColumn(name = "access_id")
private Access access;
}
У меня есть страница отчета, Администратор может выбрать несколько вариантов (например: список всех активных пользователей в тесте команды и приложения APP1).
вот мой код для извлечения данных, но он не работает:
public List<?> getReport(String teamId,String appName,UserStatus active,UserStatus inactive) {
Session session = sessionFactory.getCurrentSession();
String hql = "SELECT u.firstName,u.username,u.status,u.lastName,u.phone,u.team From UserInfo u,AppAccess a WHERE u.status =? OR u.status =? AND u.team.id = ? AND a.appName = :appName ";
Query query = session.createQuery(hql);
query.setParameter(0, active);
query.setParameter(1, inactive);
query.setParameter(2, teamId);
query.setParameter("appName", appName);
System.out.println(query.list());
return query.list();
}
Например, когда я прохожу
- Активные пользователи: Активные
- неактивным Пользователь: неопределенные
- команда: тест
приложение: app1
TeamID: 28f66133-26c3-442b-a071-4d19d64ec0aeappName: app1active: activeinactive: нулевой
Я получаю это назад от моего return query.list()
;
[[Ljava.lang.Object;@2961116f, [Ljava.lang.Object;@23bfa3a2, [Ljava.lang.Object;@7a8ff303, [Ljava.lang.Object;@9b88d2, [Ljava.lang.Object;@6333934d, [Ljava.lang.Object;@4f0bd71c, [Ljava.lang.Object;@125797cf, [Ljava.lang.Object;@34afa071, [Ljava.lang.Object;@764e75bc, [Ljava.lang.Object;@1913c652, [Ljava.lang.Object;@61413e5a, [Ljava.lang.Object;@264b898, [Ljava.lang.Object;@22930462, [Ljava.lang.Object;@6204cfa9, [Ljava.lang.Object;@29dd9285, [Ljava.lang.Object;@11be6f3c, [Ljava.lang.Object;@6d78d53d, [Ljava.lang.Object;@17f7cff1, [Ljava.lang.Object;@e74e382, [Ljava.lang.Object;@1c047338, [Ljava.lang.Object;@68286fe6, [Ljava.lang.Object;@36ca9a76, [Ljava.lang.Object;@2f62d514, [Ljava.lang.Object;@1932c5a, [Ljava.lang.Object;@6544c984, [Ljava.lang.Object;@70a2d0d, [Ljava.lang.Object;@2d13b417, [Ljava.lang.Object;@6894691f, [Ljava.lang.Object;@6781a7dc, [Ljava.lang.Object;@7133919a]
Почему вы выбираете отдельные поля вместо «select User u from ...»? – radai
вы получаете список объектов, что с этим не так? вы присоединяетесь к u и a в своем запросе? кажется, вы выбираете значения только из u, это предназначено? –