加入两个表Hibernate

时间:2017-08-01 09:24:28

标签: java hibernate spring-mvc

我正在使用Spring MVC + Hibernate(Spring数据jpa)。

这里我没有得到如何在Hibernate中为以下场景创建表。

我有两张桌子:

1)用户详细信息

2)分支

现在,对于每个用户,都有分支的字段,该值应来自分支表

我在hibernate中了解 OneToOne 。但是它为Branch表中的用户分支字段插入了一个新条目。我想要的是,当我在用户表中保存用户详细信息时,分支详细信息应该只是Branch表中用于匹配行的引用。

提前谢谢

3 个答案:

答案 0 :(得分:2)

假设您的分支可以通过其名称来识别:

UserDetails user = new UserDetails();
...
user.setBranch(branchRepository.findOneByName());
...
userDetailsRepository.save(user);

有:

@Entity
public class UserDetails {
  @Id
  @GeneratedValue
  Long id;

  @ManyToOne
  Branch branch;
  ...
}

@Entity
public class Branch {
  @Id
  @GeneratedValue
  Long id;
  ...
}

public interface BranchRepository extends Repository<Branch, Long> {
  ...
}

public interface UserDetailsRepository extends Repository<UserDetails, Long> { 
  ...
}

答案 1 :(得分:1)

您可以通过外键控制关联来使用用户分支关系。

在User类中,您将指定OneToOne映射,如下所示:

@OneToOne
@JoinColumn(name="User_Branch_ID")
private Branch branch;

这个&#34; User_Branch_ID&#34;是指您在创建User数据库表时创建的外键,如下所示:

create table BRANCH (

   branch_id BIGINT NOT NULL AUTO_INCREMENT,
   name VARCHAR(30) NOT NULL,
   city  VARCHAR(30) NOT NULL,
   country  VARCHAR(30) NOT NULL,
   PRIMARY KEY (address_id)
);
 
create table USER (
   user_id BIGINT NOT NULL AUTO_INCREMENT,
   user_branch_id BIGINT NOT NULL,
   first_name VARCHAR(30) NOT NULL,
   last_name  VARCHAR(30) NOT NULL,
   PRIMARY KEY (user_id),
   CONSTRAINT user_branch FOREIGN KEY (user_branch_id) REFERENCES BRANCH ( branch_id)
);

答案 2 :(得分:1)

第1步:创建视图

create view v_BRANCH_USER as 
         select 
                a.branch_id, a.name ,  a.city, a.country
                b.user_id,b.first_name, b.last_name
         from BRANCH a,  USER b
         where a.branch_id = b.user_branch_id

第2步:创建一个pojo并映射到hibernate作为表

@Entity
@Table(name = "v_BRANCH_USER")

public class VBranchUser
       String userId;
       ....  
}

第3步:您可以将其作为表格查询(条件,HQL ..)