2017-08-01 110 views
3

我正在使用Spring MVC + Hibernate(Spring data jpa)。加入兩張表休眠

在這裏我沒有得到如何在以下情況下在Hibernate中創建表。

我有兩個表:

1)用戶詳情

2)

現在,對於每一個用戶,存在一種用於分支的字段,並且該值應該從分支表

我知道OneToOne在休眠。但它會在分支表中爲用戶分支字段插入一個新條目。我想要的是,當我在用戶表中保存用戶詳細信息時,分支詳細信息應該只是來自分支表的參考,用於匹配行。

預先感謝您

+0

你應該檢索從DB分支對象並將其設置爲UserDetails。如果你這樣做,它不應該在分支表中創建一個新行,它應該只是創建引用。 – kimy82

+0

請顯示您的代碼。你有什麼嘗試過自己... – KayV

回答

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

您可以通過控制協會使用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

步驟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 ..)