Я использую структуру запросов критериев спящего режима для создания отчетов. Я также должен сортировать и фильтровать. Все отлично работало, когда данные были ограничены одним объектом. Однако у меня есть требование объединить несколько объектов и показать результат в одной таблице. Ниже приводятся следующие объекты:Entity для объединения нескольких таблиц
@Entity
@Table(name = "user_profile")
@Where(clause = "deleted = 0")
public class UserProfile {
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@Column(name = "username")
private String username;
@Column(name = "email")
private String email;
@Column(name = "first_name")
private String firstName;
@Column(name = "middle_name")
private String middleName;
@Column(name = "last_name")
private String lastName;
}
@Entity
@Table(name = "user_data")
public class UserData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "account_nonexpired")
private Boolean accountNonExpired = true;
@Column(name = "account_nonlocked")
private Boolean accountNonLocked = true;
@Column(name = "credentials_nonexpired")
private Boolean credentialsNonExpired = true;
@Column(name = "enabled")
private Boolean enabled = false;
}
@Entity
@Table(name = "user_role")
public class Role {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "role")
private String role;
}
Эти объекты имеют общее имя пользователя. Возможно ли создать объект, который не имеет таблицы, но просто содержит эти объекты в качестве полей? Например:
public Class UserDataProfileRoleMapping{
private UserProfile userProfile;
private List<Role> role;
private UserData userData;
}
Я могу создать таблицу сопоставлений, но я сохранил ее как последнее средство.
Редактировать
Запрос, который я хочу стрелять что-то вроде:
select * from user_data u, user_role r, user_profile up
where
u.username = r.username and
r.username = up.username;
ли Вы только должны агрегированный/присоединились информацию для отображения или вы действительно нужен стол со всей этой информацией ? Если это первый случай, вы можете создать DTO с необходимой информацией и создать соответствующий запрос. –
Мне нужно собрать эту информацию. Тем не менее, я также хочу использовать запрос критериев hibernate для api. Создание DTO приведет к обработке сортировки, фильтрации и разбивки на страницы вручную. – Vaibhav
Нет, DTO - это просто ПОЖО, которое будет содержать только нужные вам данные/столбцы. В ответ я создам быстрый пример. –