当前位置: 首页 > 知识库问答 >
问题:

如何使用spring JPA将三个实体连接到一个表中?

易成天
2023-03-14

我正在尝试使用spring-jpa将三个实体(表)连接到一个使用多对多关系的表中。

三个类别是:

1]用户

package com.****.acl.domain;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Entity
public class User {

@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name="user_id", nullable=false, length=40)
private String userId;

@Column(name="user_name", nullable=false, length=45)
private String userName;

@Column(name="first_name", nullable=true, length=45)
private String firstName;

@Column(name="last_name", nullable=true, length=45)
private String lastName;

@Column(name="email", nullable=true, length=50)
private String email;

public User(){

}

public User(String userName, String firstName, String lastName, String email) {
    this.userName = userName;
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;       
}


getter and setters .......
}
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
public class Resource {

@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name="resource_id", nullable=false, length=40)
private String resourceId;

@Column(name="resource_name", nullable=false, length=45)
private String name;

@Column(name="resource_type", nullable=false, length=45)
private String type;

public Resource(){

}

public Resource(String name, String type) {
    this.name = name;
    this.type = type;
}

getter and setter ......
}
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
public class Privilege {

@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name="privilege_id", nullable=false, length=40)
private String privilegeId;

@Column(name="resource_name", nullable=false, length=45)
private String name;

@Column(name="resource_description", nullable=true, length=45)
private String description;

public Privilege(){

}

getters and setters ....
}

有没有人可以帮助我使用多对多关系来连接这三个表,并让我知道如何使用spring-jpa和REST来实现这一点?另外,如果您能解释一下如何使用rest/curl命令在这个“user_resource_privilege”表中插入数据,那就太好了?

共有1个答案

慕容嘉熙
2023-03-14

您可以做的是创建一个可嵌入的ID并用类包装它。之后甚至可以扩展此包装类以容纳其他字段。

嵌入式id的java极客示例

你会得到

@Embeddable
public class EmbeddedIdClass implements Serializable {
  private String userId;
  private String resourceId;
  private String privilegeId;

// constructors, getters and setters, equals, etc
}

@Entity
public class Wrapper {
  @EmbeddedId
  private EmbeddedIdClass id;

// constructors, etc
}
@Entity
public class Wrapper {
  @Id
  private String id;
  private User user;
  private Resource resource;
  private Privilege privilege;


// constructors
  public Wrapper(final User user, final Resource resource, final Privilege privilege) {
    this.user = user;
    this.resource = resource;
    this.privilege = privilege;
  }
}
 类似资料:
  • 我想用spring数据写一个查询,可以找到所有有自己的狗和车的人…可以有任何身体帮助吗

  • 但是当我运行应用程序时,我会得到以下异常:

  • 问题内容: 我有三个表名为 现在要显示学生姓名和他所学习的课程名称, 我建立以下查询 但是它不会返回所需的结果… 如果我想找到谁是其他经理,那么归一化表格将是什么: 并希望得到以下结果: 问题答案: 只需使用:

  • 问题内容: 我有看起来像这样的数据: 流程将定期运行并为每个实体评分。该过程将生成数据并将其添加到得分表中,如下所示: 我希望能够为每个实体选择所有实体以及最新记录的分数,从而得到如下所示的一些数据: 我可以使用以下查询获取单个实体的数据: 但是我不知道如何为所有实体选择相同的内容。也许它正盯着我看? 非常感谢您抽出宝贵的时间。 感谢您的好评。我将花几天时间查看首选解决方案是否冒泡,然后选择答案。

  • 我在实体类中设置一些hibernate注释时遇到问题。 我的问题是:我如何告诉Hibernate,它应该在一个表中存储地址、名称和客户信息。此表应包含以下列:ID、给定、姓氏、街道、门牌号、邮政编码、城市、电话、评论。目前,Hibernate在mysql数据库中为每个实体生成一个表。因此,有必要在每个实体类(客户、名称、地址)中定义@Id。但我想用一个@Id为客户保留一张表中的所有信息。 我怎样才