【发布时间】:2017-06-25 01:26:53
【问题描述】:
我使用的是 spring boot data jpa 1.4,我对它还很陌生。 我的表定义是here。它相当简单,有 2 个表(组和用户)。
group 表包含 group_id(主键)、group_name、group_active(values=Y/N)。 理想情况下,组表可以只有一行 group_active 到 'Y',其余的应该有 'N'
user 表包含 user_id(主键)、user_name、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;
存储库类:
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()吗?
标签: spring-boot spring-data-jpa