在Spring JPA中检索一个以POJO为主键的对象



我有以下类: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,它扩展了Spring JPA提供的CrudRepository接口。我要做的是定义一个查询,该查询将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)方法,但它没有工作,所以这是解决这个问题的正确方法?

编辑:

在accountrerepository中,我定义了以下方法:

帐户findByDepartmentMemberId(int id),我仍然得到一个未找到的错误。

我的控制器实际上还有另一个问题。我通过添加

使它工作
Account findByDepartmentMemberId(@Param("id")int id);

最新更新