2016-05-31 90 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

相关问题