Java 连接两个表Hibernate

Java 连接两个表Hibernate,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我正在使用SpringMVC+Hibernate(SpringDataJPA) 在这里,我不了解如何在Hibernate中为以下场景创建表 我有两张桌子: 1) 用户详细信息 2) 分支机构 现在,对于每个用户,都有一个用于分支的字段,该值应该来自分支表 我对冬眠中的OneToOne有一定的了解。但它会在分支表中为用户分支字段插入一个新条目。我想要的是,当我在user表中保存用户详细信息时,分支详细信息应该只是分支表中匹配行的引用 提前感谢假设您的分支机构可以通过名称识别: UserDetail

我正在使用SpringMVC+Hibernate(SpringDataJPA)

在这里,我不了解如何在Hibernate中为以下场景创建表

我有两张桌子:

1) 用户详细信息

2) 分支机构

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

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


提前感谢

假设您的分支机构可以通过名称识别:

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> { 
  ...
}
@实体
公共类用户详细信息{
@身份证
@生成值
长id;
@许多酮
分支机构;
...
}
@实体
公营部门{
@身份证
@生成值
长id;
...
}
公共接口BranchRespository扩展存储库{
...
}
公共接口UserDetailsRepository扩展存储库{
...
}

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

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

@OneToOne
@JoinColumn(name="User_Branch_ID")
private Branch branch;
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)
);
此“用户分支ID”是指在创建用户数据库表时创建的外键,如下所示:

@OneToOne
@JoinColumn(name="User_Branch_ID")
private Branch branch;
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)
);

步骤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:您可以将其作为表查询(Criteria,HQL..)

您应该从DB中检索分支对象并将其设置为UserDetails。如果您这样做,它不应该在分支表中创建新行,它应该只创建引用。请显示您的代码。你自己试过什么。。。