2017-07-30 127 views
1

我有兩個班,首先是 「聚合/老闆/不管」 類:JPA:外部ID不會自動設置

@Entity 
@Table(name = "project") 
public class Project { 

    @Id 
    @GeneratedValue 
    private Long id; 

    @OneToMany(mappedBy = "project", cascade = CascadeType.PERSIST, fetch = 
    FetchType.EAGER) 
    private List<Workspace> workspaces; 

這裏的 「聚集」:

@Entity 
@Table(name = "workspace") 
public class Workspace { 

    @Id 
    @GeneratedValue() 
    private Long id; 

    @ManyToOne() 
    @JoinColumn(name = "id_project", referencedColumnName = "id", foreignKey = @ForeignKey) 
    private Project project; 

這裏是一些例子結構,我想堅持:

Project 
{ 
    description:"SOMETHING", 
    id:null, 
    name:"Project Name", 
    workspaces:[{id: null, name: "Somenthing", description: "Workspace Name", }] 
} 

我收到的位置:

@RestController 
@RequestMapping("projectRest") 
public class ProjectRestController { 

    @PostMapping("/create") 
    public ResponseEntity<String> create(@RequestBody Project project) { 
    try { 
     service.insert(project); 
     return new ResponseEntity<>("OK", HttpStatus.OK); 
    } catch (Exception ex) { 
     return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); 
    }  
    } 

我不會改變任何東西,直到我保存在一個這樣的類:

public void save(Project model) throws RuntimeException { 
    this.getSession().persist(model); 
} 

這對我的工作區表 節省像我想要的一切,在我的數據庫,除由id_project關係列,因此,我的工作區正在失去其項目的參考,我不知道我做錯了

+0

因爲你不報你怎麼說,你傳遞給em.persist則不是對象相關聯任何人都可以說。 –

+0

您可以參考https://stackoverflow.com/questions/13684963/creating-a-foreign-key-constraint-in-jpa-and-hibernate這篇文章 – Akash

+0

@NeilStockton這是因爲我沒有做任何明確的,我接受項目對象的工作空間在我的控制器對象中,我什麼都不做。我需要做更多的事情? –

回答

1

是啊,那是預期,你是有需要的關係,每個部分有其他部分的引用的雙向關係,您的項目裏面有一個工作區,但事實恰恰相反。

爲了解決要麼你去與單向關係問題,或者您檢索工作區對象和設置項目也

public void save(Project model) throws RuntimeException { 
    Workspace workspace = model.getWorkSpace(); 
    workspace.setProject(model); 
    this.getSession().persist(model); 
} 
+0

是的,謝謝,現在它可以工作...但是這不是很奇怪嗎?我只是不知道爲什麼這項工作是必要的。我的意思不是預期的行爲? –

+0

@diegocolli這是合乎邏輯的,雙向關係的目標是從另一個對象中檢索任何對象,因爲它需要做額外的工作,並且這會影響性能,所以我認爲這不會讓hibernate爲你做這件事說得通 –