Я использую данные весны boot jpa 1.4, и я довольно новичок в этом. Определение моего стола - here. Его довольно просто, есть 2 таблицы (группы и пользователи).Внутреннее соединение в данных весенней загрузки jpa
группа таблица содержит GROUP_ID (первичный ключ), GROUP_NAME, group_active (значения = Y/N). В таблице группы могут в идеале иметь только одну строку, которая имеет group_active к «Y», остальные должны иметь «N»
пользователя таблица содержит user_id (первичный ключ), имя_пользователя, group_id (внешний ключ из группа).
Ниже приведены мои классы сущностей
Группа:
@Entity
@Table(schema = "HR", name = "GROUPS")
public class Group {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "GROUP_ID")
private Long id;
@Column(name = "GROUP_NAME")
private String name;
@Column(name = "GROUP_ACTIVE")
private String active;
Пользователь:
@Entity
@Table(schema = "HR", name = "USERS")
public class User {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "USER_ID")
private Long id;
@Column(name = "USER_NAME")
private String name;
@Column(name = "GROUP_ID")
private Long groupId;
@ManyToMany
@JoinTable(
schema = "HR",
name = "GROUPS",
joinColumns = {@JoinColumn(table = "GROUPS", name = "GROUP_ID", insertable = false, updatable = false)},
inverseJoinColumns = {@JoinColumn(table = "USERS", name = "GROUP_ID", insertable = false, updatable = false)}
)
@WhereJoinTable(clause = "GROUP_ACTIVE='Y'")
private List<Group> group;
Repository класс:
public interface UserRepository extends CrudRepository<User, Long>{
List<User> findByName (String name);
}
Запрос: Это запрос, я хочу выполнить, что является простым внутренним соединением.
SELECT U.*
FROM HR.USER U, HR.GROUP G
WHERE U.GROUP_ID=G.GROUP_ID
AND G.GROUP_ACTIVE='Y'
AND U.USER_NAME=?
Что бы правильный способ, чтобы написать @JoinTable или @JoinColumn таким образом, что я всегда получаю обратно один пользователь, который принадлежит к активной группе с названием?
возможность запускать 'FindAll()' в таблице пользователей Вы? –