Sprind Data JPA OneToOne 和 ManyToOne 关系
Sprind Data JPA OneToOne and ManyToOne Relations
我有 2 个名为 Machine
和 MachineType
的实体。 Machine
只能有一个 MachineType
但 MachineType
可以有多个或 none 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
}
机器类型
@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
,我现在卡住了。我应该什么时候使用它们?
在Machine中,应该使用ManyToOne关系。如果你想要双向关联,你可以在 MachineType 中添加 OneToMany。 MappedBy vs JoinColumn 在
JPA JoinColumn vs mappedBy
I dont understand mappedBy and @JoinColumn correctly and I stuck right now.
mappedBy = 关系字段或作为关系所有者的实体的 属性。在此示例中,这是由 @ManyToOne
注释注释的 machineType 字段。
@JoinColumn = 数据库中外键列的名称。这意味着当您定义 table 时,例如 MACHINE
和 MACHINE_TYPE
,您将 MACHINE_TYPE
table 的主键添加到 MACHINE
从而在 table 之间建立关系。该字段称为外键,因为它指向数据库中另一个 table 中的另一条记录。此列的名称是通过此注释指定的。
注意:只有在需要双向关系时才需要 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
}
我从 GeneratedValue
注释中删除了 strategy = GenerationType.TABLE
,因为它不会像您指定的那样工作。如果您想使用 table 生成器(这是生成主键的推荐方法),您必须做的不仅仅是像您那样指定。
我有 2 个名为 Machine
和 MachineType
的实体。 Machine
只能有一个 MachineType
但 MachineType
可以有多个或 none 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
}
机器类型
@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
,我现在卡住了。我应该什么时候使用它们?
在Machine中,应该使用ManyToOne关系。如果你想要双向关联,你可以在 MachineType 中添加 OneToMany。 MappedBy vs JoinColumn 在 JPA JoinColumn vs mappedBy
I dont understand mappedBy and @JoinColumn correctly and I stuck right now.
mappedBy = 关系字段或作为关系所有者的实体的 属性。在此示例中,这是由 @ManyToOne
注释注释的 machineType 字段。
@JoinColumn = 数据库中外键列的名称。这意味着当您定义 table 时,例如 MACHINE
和 MACHINE_TYPE
,您将 MACHINE_TYPE
table 的主键添加到 MACHINE
从而在 table 之间建立关系。该字段称为外键,因为它指向数据库中另一个 table 中的另一条记录。此列的名称是通过此注释指定的。
注意:只有在需要双向关系时才需要 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
}
我从 GeneratedValue
注释中删除了 strategy = GenerationType.TABLE
,因为它不会像您指定的那样工作。如果您想使用 table 生成器(这是生成主键的推荐方法),您必须做的不仅仅是像您那样指定。