meh*_*ani 3 java spring hibernate jpa spring-data-jpa
我有 2 个表,一个是Users,另一个是UserGroup有ManyToMany关系 ,如何使用 spring-data-JPA 将它们合并到一个列表中。
** 不想使用本机查询
更新:
我需要的确切查询:
从用户中选择电子邮件
联盟
从组中选择标题
如果你想要联合,我想这两个实体的结构是相似的。
您可以创建一个超级实体并让 User 和 UserGroup 扩展这个新实体。@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)如果您想保留 2 个单独的表,请添加新实体。
然后,为父实体创建一个 Spring Data JPA 存储库。
/**
* new abstract Superclass
*/
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class User {
@Id
private String id;
//...
}
/**
* Existing User entity
*/
@Entity
@Table(name="my_users")
public class LoginUser extends User {
private String password;
@ManyToOne
private Group group;
//...
}
/**
* Existing Group entity
*/
@Entity
@Table(name="my_groups")
public class Group extends User {
private String name;
@OneToMany(mappedBy="group")
private Set<LoginUser> users;
//...
}
/**
* Super repository, providing UNION
*/
public interface UserRepository extends JpaRepository<User, String> {}
Run Code Online (Sandbox Code Playgroud)
调用UserRepository.findAll将使 JPA 执行UNION2 个表的操作,并且可以返回List<User>. 您将在此列表中同时拥有LoginUser和Group实例:
// UNION query returning both LoginUser and Group instances
List<User> myUnion = userRepository.findAll();
Run Code Online (Sandbox Code Playgroud)
有关 JPA 继承的更多详细信息,请参阅https://en.wikibooks.org/wiki/Java_Persistence/Inheritance 。
JPA/Hibernate 不支持自定义 UNION 查询,但继承在使用策略时在同一层次结构的实体之间提供开箱即用的 UNION TABLE_PER_CLASS。
您无法使用 JPA 生成您想要的查询。无法合并不同的字段。但是,如果您将电子邮件和标题映射到同一字段(这是无意义的)并编写以下 JPQL,JPA 将生成您的查询。
SELECT u.yourField FROM User u;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16859 次 |
| 最近记录: |