我有2个名为Machine
和MachineType
的实体。 Machine
只能有一个MachineType
,但MachineType
可以有多个Machine
。我尝试了大量的关系注释,但我错过了一些东西。
机
@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
正确而且我现在卡住了。我什么时候应该使用它们?
答案 0 :(得分:1)
我没有正确理解mappedBy和@JoinColumn而且我现在卡住了。
mappedBy =关系字段或作为关系所有者的实体的属性。在此示例中,这是由@ManyToOne
注释添加注释的字段 machineType 。
@JoinColumn =数据库中外键列的名称。这意味着在您定义表时,例如MACHINE
和MACHINE_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.TABLE
注释中删除了GeneratedValue
,因为它不会像您指定的那样工作。如果你想使用表生成器(这是生成主键的推荐方法),你必须做的不仅仅是像你那样指定。
答案 1 :(得分:0)
在Machine中,您应该使用ManyToOne关系。如果要进行双向关联,可以在MachineType中添加OneToMany。 MappedBy vs JoinColumn的回答是 JPA JoinColumn vs mappedBy