【问题标题】:SELECT * FROM with JPA for many-to-many relationshipSELECT * FROM with JPA 用于多对多关系
【发布时间】:2018-06-23 17:14:27
【问题描述】:

我想使用 JPQL 进行内部连接查询(SELECT)。 我正在使用 hibernate ddl auto 从实体创建表。

我有 2 个实体,它们之间通过多对多关系相互关联(一个工作室可以由多个经理(用户)管理,一个经理(用户)可以管理多个工作室 )。

如您所知,对于多对多关系,我们使用中间表通过原生 SQL 执行“SELECT”,但我使用 JPA 和 JPQL 作为查询语言,所以我的问题是:如何在通过多对多关系关联的2个表之间进行JOIN SELECT?

以下实体是我的实体:

实体 1(工作室):

@Entity
@Table(name = "studio")
public class Studio implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name = "studio_name", nullable = false)
private String studioName;

/**
 * Indicates if the studio is active or inactive in the data base.
 */
@Column(name = "active")
private Boolean active;

/**
 * The studio owner is the main manager for a studio.
 */
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "studio_owner", referencedColumnName = "id", nullable = false)
private User studioOwner;

/**
 * Represents all the possible managers for this studio.
 */
@ManyToMany(fetch = FetchType.LAZY)
private List<User> studioManagers;

//--Getters and setter below
}

实体 2(用户):

@Entity
@Table(name = "userr")
public class User implements Serializable  {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "user_name", nullable = false, unique = true)
private String userName;

@Column(name = "email", nullable = false, unique = true)
private String email;

@Column(name = "password", length = 60)
private String password;

@Column(name = "name")
private String name;

@Column(name = "last_name")
private String lastName;

@Column(name = "user_state", nullable = false)
@Enumerated(EnumType.STRING)
private UserState userState; 

/**
 * The roles for this user.
 */
@ManyToMany(fetch = FetchType.EAGER)
private List<Role> roles;

public User() {
}

//--Getters and setter below
}

对不起,我说英语,我说西班牙语。

【问题讨论】:

  • 你想要哪条记录?意味着没有得到你想要的东西?
  • 您的 JPQL 基于 CLASSES/FIELDS。您不会考虑 TABLES。只需在关系字段上做一个 JOIN

标签: java sql hibernate jpa jpql


【解决方案1】:

在 StudioRepository.java 中只写一个方法

List<Studio> findById(Integer id); 

这将获取与该工作室关联的所有用户的工作室。

例如: 工作室{ “身份证”:1, "studioName": "一些", “工作室所有者”:[ { ...... …… }, { …… } ] }

【讨论】:

  • OP 是否说他们正在使用“Spring Data JPA”?
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
相关资源
最近更新 更多