我正在寻找创建一个DAO,它表示用Java Hibernate连接两个表。下面是我想表示的SQL(如果重要的话,请参见Postgres9.6):

SELECT tableOneValue, tableTwoValue
FROM table_one, table_two
WHERE table_one_filter = 2 AND table_one_id = table_two_id;

这些桌子是一对一的关系。
表1.java
@Entity
@Data
@Table(name="table_one")
public class TableOneDao implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "table_one_id")
    private int tableOneId;

    @Column(name = "table_one_value")
    private String tableOneValue;


    @Column(name = "table_one_filter")
    private int tableOneFilter;
}

表2.java
@Entity
@Data
@Table(name="table_two")
public class TableTwoDao implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "table_twp_id")
    private int tableTwpId;

    @Column(name = "table_two_value")
    private String tableTwoValue;
}

我对冬眠很陌生,所以也许这不是正确的思考方式。我想做的是定义一个SomeDao类,在这里我可以做:daoManager.findAll(SomeDao.class, Pair.of("tableOneFilter", 2));
这将返回一个List<SomeDao>,在这里我们得到满足tableOneFilter==2的所有行。

最佳答案

您需要使用@OneToOne@JoinColumn注释。
请特别注意userDetail属性映射。
例如,用户类:

@Entity
@Table(name = "USERS")
public class User {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "USR_ID")
   private long id;

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

   @Column(name = "PASSWORD")
   private String password;

   @OneToOne(cascade = CascadeType.ALL)
   @JoinColumn(name="USR_DET_ID")
   private UserDetail userDetail;

   // Add Constructor, Setter and Getter methods
}

这个用户详细信息类:
@Entity
@Table(name = "USER_DETAILS")
public class UserDetail {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "USR_DET_ID")
   private long id;

   @Column(name = "FIRST_NAME")
   private String firstName;

   @Column(name = "LAST_NAME")
   private String lastName;

   @Column(name = "EMAIL")
   private String email;

   @Column(name = "DBO")
   private LocalDate dob;

   // Add Constructor, Setter and Getter methods
}

检查完整代码here

10-06 14:08
查看更多