我正在使用Spring MVC + Hibernate(Spring data jpa)。加入两张表休眠
在这里我没有得到如何在以下情况下在Hibernate中创建表。
我有两个表:
1)用户详情
2)科
现在,对于每一个用户,存在一种用于分支的字段,并且该值应该从分支表。
我知道OneToOne在休眠。但它会在分支表中为用户分支字段插入一个新条目。我想要的是,当我在用户表中保存用户详细信息时,分支详细信息应该只是来自分支表的参考,用于匹配行。
预先感谢您
我正在使用Spring MVC + Hibernate(Spring data jpa)。加入两张表休眠
在这里我没有得到如何在以下情况下在Hibernate中创建表。
我有两个表:
1)用户详情
2)科
现在,对于每一个用户,存在一种用于分支的字段,并且该值应该从分支表。
我知道OneToOne在休眠。但它会在分支表中为用户分支字段插入一个新条目。我想要的是,当我在用户表中保存用户详细信息时,分支详细信息应该只是来自分支表的参考,用于匹配行。
预先感谢您
假设你的分支机构可以通过它们的名称来标识:
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> {
...
}
您可以通过控制协会使用User-科关系通过它的外键。
和用户类的内部,你会按如下方式指定OneToOne映射:
@OneToOne
@JoinColumn(name="User_Branch_ID")
private Branch branch;
而这个“User_Branch_ID”是指你在创建用户数据库表如下创建的外键:
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和映射到冬眠作为表
@Entity
@Table(name = "v_BRANCH_USER")
public class VBranchUser
String userId;
....
}
步骤3:可以查询它作为一个表(标准,HQL ..)
你应该检索从DB分支对象并将其设置为UserDetails。如果你这样做,它不应该在分支表中创建一个新行,它应该只是创建引用。 – kimy82
请显示您的代码。你有什么尝试过自己... – KayV