原因:java.lang.IllegalArgumentException:不是托管类型(&;原因:org.hibernate.AnnotationException:未为实体指定标识符:

原因:java.lang.IllegalArgumentException:不是托管类型(&;原因:org.hibernate.AnnotationException:未为实体指定标识符:,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我创建了两个实体类 角色: import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table (name ="roles") public class RoleEntity { @Id @Column(name = "role_id") private Integer role

我创建了两个实体类

角色:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table (name ="roles")
public class RoleEntity {

@Id
@Column(name = "role_id")
private Integer roleId;
@Column(name = "role_name")
private String roleName;
//Getters
//Setters
用户实体:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user_master")
public class UserEntity {

@Id
private Integer id;
@Column(name = "user_name")
private String username;
@Column(name = "user_password")
private String password;
//getters
//setters
现在我有了一个简单的pojo,它将从这两个实体获取数据,稍后将在服务中使用

import java.util.Set;

public class UserRoleAssociationEntity {

UserEntity user;
Set<RoleEntity> roles;
//getters
//setters
如果我用@entity注释UserRoleAsociationEntity类,则会出现以下错误:

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.dataGuru.BusDirV3.Entities.UserRoleAssociationEntity

我在这里面临的问题是什么&这个问题的解决方案。

您的类中需要有一个唯一的字段,作为这个实体的标识符。(带有
@Id
注释的字段)

您的类中需要有一个唯一的字段,作为该实体的标识符。(带有
@Id
注释的字段)

不要创建新的POJO,而是在UserEntity类中添加多对多关系,如

 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.Table;

 @Entity
 @Table(name="user_master")
 public class UserEntity 
{
 @Id
 private Integer id;
 @Column(name = "user_name")
 private String username;
 @Column(name = "user_password")
 private String password;
 @Column(name = "user_password")
 private String password;

 @ManyToMany(cascade=CascadeType.MERGE, fetch = FetchType.EAGER) //
 @JoinTable(
        name="USERROLE_ASSOCIATION",
        joinColumns={@JoinColumn(name="USER_ID", referencedColumnName="ID")},
        inverseJoinColumns={@JoinColumn(name="ROLE_ID", referencedColumnName="ID")})
private Set<RoleEntity> UserRoleAssociationEntity ;
import javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入javax.persistence.Table;
@实体
@表(name=“user\u master”)
公共类用户实体
{
@身份证
私有整数id;
@列(name=“user\u name”)
私有字符串用户名;
@列(name=“user\u password”)
私有字符串密码;
@列(name=“user\u password”)
私有字符串密码;
@ManyToMany(cascade=CascadeType.MERGE,fetch=FetchType.EAGER)//
@可接合(
name=“USERROLE\u关联”,
joinColumns={@JoinColumn(name=“USER\u ID”,referencedColumnName=“ID”)},
inverseJoinColumns={@JoinColumn(name=“ROLE\u ID”,referencedColumnName=“ID”)}
私有设置UserRolesSociationEntity;

不要创建新的POJO,而是在UserEntity类中添加多对多关系,如

 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.Table;

 @Entity
 @Table(name="user_master")
 public class UserEntity 
{
 @Id
 private Integer id;
 @Column(name = "user_name")
 private String username;
 @Column(name = "user_password")
 private String password;
 @Column(name = "user_password")
 private String password;

 @ManyToMany(cascade=CascadeType.MERGE, fetch = FetchType.EAGER) //
 @JoinTable(
        name="USERROLE_ASSOCIATION",
        joinColumns={@JoinColumn(name="USER_ID", referencedColumnName="ID")},
        inverseJoinColumns={@JoinColumn(name="ROLE_ID", referencedColumnName="ID")})
private Set<RoleEntity> UserRoleAssociationEntity ;
import javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入javax.persistence.Table;
@实体
@表(name=“user\u master”)
公共类用户实体
{
@身份证
私有整数id;
@列(name=“user\u name”)
私有字符串用户名;
@列(name=“user\u password”)
私有字符串密码;
@列(name=“user\u password”)
私有字符串密码;
@ManyToMany(cascade=CascadeType.MERGE,fetch=FetchType.EAGER)//
@可接合(
name=“USERROLE\u关联”,
joinColumns={@JoinColumn(name=“USER\u ID”,referencedColumnName=“ID”)},
inverseJoinColumns={@JoinColumn(name=“ROLE\u ID”,referencedColumnName=“ID”)}
私有设置UserRolesSociationEntity;

如果你在
UserEntity
中有一个
Set
属性,我想jpa会为你创建一个关联表。如果我用@entity注释它,情况就是这样,但是当我不使用任何注释时,它应该作为一个简单的pojo来工作。但这不是在这里发生的。如果你有,我想jpa会为你创建一个关联表
UserEntity
中的
Set
属性,如果我用@entity注释它,就会出现这种情况,但是当我不使用任何注释时,它应该作为一个简单的pojo来工作。但这不是在这里发生的。在这种情况下,它会为UserEntity用户抛出一个错误;并将角色设置为未识别的类型。我只想将这个类用作pojo。在这种情况下,它将为UserEntity user;抛出一个错误,并将roles;设置为未识别类型。我只是想将此类用作pojo。它似乎是合乎逻辑的,而且也这样做了。我在UserRoleAssociation中为UserEntity添加了一对一关系,就像在数据库UserRoleAssociation表中一样,该表包含user_id和Role_id的外键。但仍然没有任何进展错误仍然存在。;(添加多对多,并且已从包中删除此UserRoleAsociationEntity类。您不再需要该POJO,可以从userEntity.GetUserRoleAsociationEntity()获取所需的数据);您将获得与该用户关联的所有角色。您不需要单独的POJOIt,这似乎是合乎逻辑的,而且也做到了。我在UserRoleAssociation中为userEntity添加了一对一关系,就像在数据库UserRoleAssociation表中包含用户id和角色id的外键一样。但仍然没有相同的错误继续出现;(添加多对多,您已从包中删除此UserRoleAsociationEntity类。您不再需要该POJO,您可以从userEntity.GetUserRoleAsociationEntity()获得所需的数据;您将获得与用户关联的所有角色。您不需要单独的POJO