使用SpringJPA检索以POJO作为主键的对象

使用SpringJPA检索以POJO作为主键的对象,spring,hibernate,jpa,spring-boot,spring-data-jpa,Spring,Hibernate,Jpa,Spring Boot,Spring Data Jpa,我有以下类:DepartmentMember和Account,由OneToOne关系映射 这是DepartmentMember类: @Entity(name="departmentmember") @Table(name="departmentmember") @Embeddable public class DepartmentMember { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private i

我有以下类:DepartmentMember和Account,由OneToOne关系映射

这是DepartmentMember类:

@Entity(name="departmentmember")
@Table(name="departmentmember")
@Embeddable
public class DepartmentMember {

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

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

   @Column(name="lastName", nullable=false)
   private String prenume;

   @OneToOne(mappedBy="departmentMember",cascade=CascadeType.ALL,fetch=FetchType.LAZY, optional=false)
   @JsonIgnore
   private Account account;

   public DepartmentMember() {}

   public DepartmentMember(String nume, String prenume, String cNP, String email) {
       super();
       this.nume = nume;
       this.prenume = prenume;

     }

  //getters and setters

}
这是Account类:

@Entity(name="users")
@Table(name="users")
public class Account {

    @Id
    private int id;

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

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

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

    @OneToOne(fetch=FetchType.EAGER)
    @MapsId
    @Embedded
    private DepartmentMember departmentMember;

    public Account() {}


    public Account(String username, String password, String authorities) {
    super();
    this.username = username;
    this.password = password;
    this.authorities = authorities;
}

//getters and setters
}
我已经定义了一个接口AccountRepository,它扩展了SpringJPA提供的Crudepository接口。 我要做的是定义一个查询,它将DepartmentMember id作为参数,并检索该成员的关联帐户。下面是Account对象的外观:

{
"username": "Maria_Popescu",
"password": "4ec38c6e-2463-4562-99ba-9f6c2b4528c4",
"authorities": "ROLE_USER",
"departamentMember": {
  "id": 2,
  "nume": "Popescu",
  "prenume": "Maria",
}
我尝试使用findOne(int-id)方法,但它不起作用,那么解决这个问题的正确方法是什么

编辑: 在AccountRepository中,我定义了以下方法:


帐户找到了DbyDepartmentMemberId(int id),但我仍然收到一个找不到的错误。

我的控制器中实际上存在另一个问题。我通过添加

Account findByDepartmentMemberId(@Param("id")int id);

在AccountRepository中,我的控制器实际上存在另一个问题。我通过添加

Account findByDepartmentMemberId(@Param("id")int id);

在AccountRepository中

我对上述内容有点困惑,您确定您的映射是正确的吗?我不认为in-Account DepartmentMember可以同时嵌入和OneToOne。@加菲尔德我后来实际上删除了它们,但这并没有改变事情的表现方式。我的查询仍然不起作用:(我对上面的内容有点困惑,你确定你的映射是正确的吗?我不认为in Account DepartmentMember可以同时嵌入和OneToOne。@加菲猫我后来确实删除了它们,但它并没有改变事情的行为方式。我的查询仍然不起作用:(