我正在使用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