使用Spring JPA检索具有POJO作为主键的对象

时间:2016-11-13 12:22:36

标签: 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 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

}

这是帐户类:

@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)方法,但它没有用,所以哪种解决方法正确?

修改 在AccountRepository中,我定义了以下方法:

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

1 个答案:

答案 0 :(得分:0)

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

来实现它
Account findByDepartmentMemberId(@Param("id")int id);
AccountRepository中的