我正在使用Spring MVC + Hibernate(Spring数据jpa)。
这里我没有得到如何在Hibernate中为以下场景创建表。
我有两张桌子:
1)用户详细信息
2)分支
现在,对于每个用户,都有分支的字段,该值应来自分支表。
我在hibernate中了解 OneToOne 。但是它为Branch表中的用户分支字段插入了一个新条目。我想要的是,当我在用户表中保存用户详细信息时,分支详细信息应该只是Branch表中用于匹配行的引用。
提前谢谢
答案 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 ..)