假设我的数据库中有一个表project
。每个项目
有许多用户
,每个用户
可能有许多项目
。这将是一个经典的manytomany
-相关性,因此,如果我想在我的Spring Boot JPA中描述它,我可以如下所示:
设置我的实体并将它们连接起来:
@Entity
public class User {
@id
@Column(name="ID")
public int id;
@ManyToMany
html" target="_blank">public Set<Project> projectSet;
}
@Entity
@Table(name="PROJECT")
public class Project {
@id
@Column("ID")
private int id;
@ManyToMany
private Set<User> users;
}
实现我的存储库:
@Repository
public interface ProjectRepo implements JpaRepository<Project, Integer> {
public Set<User> getAllUsers();
}
现在让我们假设我想指定每个用户在这个项目中的角色。因此,我将有一个表role
,它使用以下实体表示来指定不同的角色:
@Entity
@Table(name="ROLES")
public class Role {
@id
@Column(name="ID")
private int id;
@Column(name="DESCRIPTION")
private String description;
}
但这与我的用户和项目有什么联系呢?所以我想展示的是,一个用户可以在一个项目中有一个角色,但在许多项目中有许多角色。此外,一个角色可以分配给一个或多个项目中的多个用户,一个项目可以有多个用户,其中每个用户只有一个角色,但有多个角色。如果我简单地将@manytomany集
添加到我的users
,我就不能说哪个用户将在哪个项目中扮演哪个角色。那么该如何描绘呢?我需要创建第三个类来连接它们吗?
@Entity
@Table(name="USER")
public class User {
@id
@Column(name="id")
private int id;
@Column(name="firstname")
private String firstname;
@Column(name="lastname")
private String lastname;
@OneToMany
private List<Assignment> assignments;
//getters and setters and stuff
}
@Entity
@Table(name="PROJECT")
public class Project {
@id
@Column(name="PNUM")
private String pnum;
@Column(name="PNAME")
private String pname;
@OneToMany
private List<Assignment> assignments;
//getters and setters and stuff
}
@Entity
@Table(name="ROLE")
public class Role {
@id
@Column(name="id")
private int id;
@Column(name="DESCRIPTION")
private String description;
@OneToMany
private List<Assignment> assignments;
//getters and setters and stuff
}
到目前为止还可以,所以我将创建以下assignment
-class。我需要能够从用户
跟踪到项目
和角色
,所以我需要三个字段。让我们使用(通常的)用例:表赋值
通过将FKs中的一个组合PK连接到names表来连接用户
、项目
和角色
。现在Spring Boot JPA中的组合PK通常(据我所知)在使用@embeddable
-注释的新类中提供。从这个角度来看,我会做以下几点:
@Embeddable
public class AssignmentId implements Serializable {
private User user;
private Project project;
private Role role;
}
并将我的赋值
-class更改为:
@Entity
@Table(name="ASSIGNMENT")
public class Assignment {
@EmbeddedId
private AssignmentId assignmentId;
}
现在,当这样做时,我在尝试运行Spring-Boot时遇到了以下错误:
beanCreationException:创建类路径资源[org/springframework/boot/autoconfigure/orm/jpa/hibernatejpaconfiguration.class]中定义的名为“Entity ManagerFactory”的bean时出错:调用init方法失败;嵌套异常是javax.persistence.persistenceException:[persistenceUnit:default]无法构建Hibernate SessionFactory;嵌套异常是org.hibernate.mappingException:无法确定表:赋值中列:[org.hibernate.mapping.column(project)]的类型:com.demo.example.entity.project
问题出在@embedded
类上。将实体
连接到元素时出现问题:
private Role role;
private Project project;
private User user;
在@manytoone
中,您将引用分配
中的用户
、项目
、角色
,但您可能需要也可能不需要使用@onetomany
。有一篇关于实现@oneTomany
的最佳实践的非常好的文章:https://vladmihalcea.com/the-best-way-to-map-a-oneTomany-association-with-jpa-and-hibernate感谢@vlad-mihalcea
我想用spring数据写一个查询,可以找到所有有自己的狗和车的人…可以有任何身体帮助吗
AnsprechPartner Lieferant ansprechpartner.java lieferant.java 在我的AnsprechPartner.java中,我是这样做的: 在我的Lieferanten.java中,我是这样做的:
另一个实体是: 我想编写一个接口,例如
我正在尝试使用spring-jpa将三个实体(表)连接到一个使用多对多关系的表中。 三个类别是: 1]用户 有没有人可以帮助我使用多对多关系来连接这三个表,并让我知道如何使用spring-jpa和REST来实现这一点?另外,如果您能解释一下如何使用rest/curl命令在这个“user_resource_privilege”表中插入数据,那就太好了?
我正在努力使用jpa Crudepository接口连接两个实体模型。我不知道如何映射两个实体模型并在@query注释中编写查询。这些是我的实体类。我想执行这个查询“从taxi\u driver\u映射中选择dppd.payment\u plan\u id,dppd.attribute\u value,dppd.attribute\u id作为tdm加入driver\u payment\u pla