2016-05-31 111 views
0

我有2個實體名爲MachineMachineTypeMachine只能有一個MachineType,但MachineType可以有多個或者沒有Machine。我嘗試了大量的關係註釋,但我錯過了一些東西。Sprind Data JPA OneToOne和ManyToOne的關係

@Entity 
public class Machine { 

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
@Column(name = "machine_id") 
private Long machineId; 

@OneToOne(???) 
private MachineType machineType; 

@Column(name = "machine_name") 
private String MachineName; 

//getters and setters 
} 

MachineType

@Entity 
public class MachineType { 

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
private Long machineTypeId; 

@ManyToOne(???) 
private List<Machine> machines; 

@Column(name = "machine_type_name") 
private String machineTypeName; 

//getters and setters 
} 

我不明白mappedBy@JoinColumn正確,我現在卡住了。我應該什麼時候使用它們?

回答

1

我不明白的mappedBy和@JoinColumn正確的回答,我現在卡住了。

mappedBy =作爲關係所有者的實體的關係字段或屬性。在此示例中,這是字段machineType註釋@ManyToOne註釋。

@JoinColumn =數據庫中外鍵列的名稱。這意味着當您定義表格時,例如,MACHINEMACHINE_TYPE,可以將MACHINE_TYPE表的主鍵添加到MACHINE中,從而創建表之間的關係。該字段被稱爲外鍵,因爲它指向數據庫中另一個表中的另一條記錄。此欄的名稱通過此註釋指定。

注意mappedBy元素只有在需要雙向關係時才需要。否則,這不是必需的。

@Entity 
public class Machine { 

    @Id 
    @GeneratedValue 
    @Column(name = "machine_id") 
    private Long machineId; 

    @ManyToOne 
    @JoinColumn(name="name_of_foreignkey") 
    private MachineType machineType; 

    @Column(name = "machine_name") 
    private String MachineName; 

    //getters and setters 
} 

@Entity 
public class MachineType { 

    @Id 
    @GeneratedValue 
    private Long machineTypeId; 

    @OneToMany(mappedBy="machineType") 
    private List<Machine> machines; 

    @Column(name = "machine_type_name") 
    private String machineTypeName; 

    //getters and setters 
} 

我刪除strategy = GenerationType.TABLEGeneratedValue註釋因爲當你指定它不會工作。如果你想使用表生成器(這是生成主鍵的推薦方式),你必須做的不僅僅是像你一樣指定。

0

在機器中,您應該使用ManyToOne關係。如果您想要雙向關聯,則可以在MachineType中添加OneToMany。的mappedBy VS JoinColumn在 JPA JoinColumn vs mappedBy

相關問題