如何使用jpa实现一对多关系

时间:2013-11-27 20:11:37

标签: jpa one-to-many jpql

我只是想知道你们是否可以解释令我困惑的事情

我有两个表userdetails

create table usertable (
        username varchar(128) NOT NULL,
        password varchar(128) NOT NULL
);

和一个addresses,我如何在JPA中映射它,我可以有一个用户到多个地址,如何实现,是否必须在创建表或在类中完成?

感谢

EDITTTT

create table usertable (
        username varchar(128) NOT NULL CONSTRAINT USER_PK PRIMARY KEY ,
        password varchar(128) NOT NULL,
firstaname varchar(30) NOT NULL,
surname varchar(30) NOT NULL,
gender varchar(6) NOT NULL,
homenumber varchar(128) NOT NULL,
mobilenumber varchar(128) NOT NULL,
dob date NOT NULL,
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
);


create table grouptable(
        username varchar(128) NOT NULL,
        groupid  varchar(128) NOT NULL,
        CONSTRAINT GROUP_PK PRIMARY KEY(username, groupid),
        CONSTRAINT USER_FK FOREIGN KEY(username) REFERENCES usertable(username)
            ON DELETE CASCADE ON UPDATE RESTRICT
    );

create table address(
username varchar(128) NOT NULL,
                addressline1 varchar(128) NOT NULL,
                addressline2 varchar(128) NOT NULL,
                addressline3 varchar(128) NOT NULL,
                country varchar(128) NOT NULL,
                postcode varchar(9) NOT NULL,
CONSTRAINT USER2_FK FOREIGN KEY(username) REFERENCES usertable(username)
                     );

1 个答案:

答案 0 :(得分:2)

这可以在您的实体类中指定。这是一个使用注释的快速示例。

@Entity
public class UserDetail {
  @Id
  @Column(name="ID")
  private long id;
  ...
  @OneToMany(mappedBy="userdetail")
  private List<Address> addresses;
  ...
}

@Entity
public class Address {
  @Id
  private long id;
  ...
  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="userdetail")
  private UserDetail userdetail;
  ...
}