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