此数据库的正确 JPA 实体映射是什么?
What is the correct JPA entity mapping for this database?
所以,这是数据库:
drop database if exists demo;
create database demo;
use demo;
create table user_entity(
user_id INT primary key auto_increment,
user_name varchar(30),
medicine_id int
);
create table medicine_entity(
medicine_id int primary key auto_increment,
medicine_name varchar(30)
);
alter table user_entity
add foreign key(medicine_id) references medicine_entity(medicine_id);
insert into medicine_entity(medicine_name) values('paracetamol');
insert into medicine_entity(medicine_name) values('vix');
insert into user_entity(user_name, medicine_id) values('a',1);
insert into user_entity(user_name, medicine_id) values('a',2);
insert into user_entity(user_name, medicine_id) values('b',2);
insert into user_entity(user_name, medicine_id) values('c',1);
此数据库的适当映射是什么,实体 类 :
UserEntity.class :
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class UserEntity
{
public UserEntity()
{
super();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long userId;
private String userName;
@ManyToMany
private Set<MedicineEntity> medicineId;
public long getUserId()
{
return userId;
}
public void setUserId(long userId)
{
this.userId = userId;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public Set<MedicineEntity> getMedicineId()
{
return medicineId;
}
public void setMedicineId(Set<MedicineEntity> medicineId)
{
this.medicineId = medicineId;
}
}
MedicineEntity.class:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class MedicineEntity
{
public MedicineEntity()
{
super();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long medicineId;
private String medicineName;
@ManyToMany
private Set<UserEntity> userId;
public long getMedicineId()
{
return medicineId;
}
public void setMedicineId(long medicineId)
{
this.medicineId = medicineId;
}
public String getMedicineName()
{
return medicineName;
}
public void setMedicineName(String medicineName)
{
this.medicineName = medicineName;
}
}
我正在考虑两个实体上的@ManyToMany 关系,但不确定。所以,请帮助我用正确的关系映射更正代码,并详细说明为什么使用这种关系,更正的作用是什么,请不要关闭这个问题。
该数据库的映射:
@Entity
@Table(name="user_entity")
public class UserEntity {
public class UserEntity() {}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_id")
private Integer userId;
@Column(name="user_name")
private String userName;
@ManyToOne
@JoinColumn(name="medicine_id")
private MedicineEntity medicineEntity;
...
}
@Entity
@Table(name="medicine_entity")
public class MedicineEntity() {}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="medicine_id")
private Integer medicineId;
@Column(name="medicine_name")
private String medicineName;
// (Optional) If you want a bidirectional association
@OneToMany(mappedBy="medicine_id")
private Set<UserEntity> userId;
...
}
这不是多对多,因为它需要额外的 table 来映射 UserEntity
和 MedicineEntity
之间的关系(table user_medicine
例如)。
有关 mapping associations 的更多详细信息,请参阅 Hibernate ORM 文档。
此外,我不鼓励使用原始类型作为标识符。您将无法将它们设置为 null 这样更容易弄清楚
当一个实体没有 id 时(否则你必须检查 0 或更大)
所以,这是数据库:
drop database if exists demo;
create database demo;
use demo;
create table user_entity(
user_id INT primary key auto_increment,
user_name varchar(30),
medicine_id int
);
create table medicine_entity(
medicine_id int primary key auto_increment,
medicine_name varchar(30)
);
alter table user_entity
add foreign key(medicine_id) references medicine_entity(medicine_id);
insert into medicine_entity(medicine_name) values('paracetamol');
insert into medicine_entity(medicine_name) values('vix');
insert into user_entity(user_name, medicine_id) values('a',1);
insert into user_entity(user_name, medicine_id) values('a',2);
insert into user_entity(user_name, medicine_id) values('b',2);
insert into user_entity(user_name, medicine_id) values('c',1);
此数据库的适当映射是什么,实体 类 :
UserEntity.class :
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class UserEntity
{
public UserEntity()
{
super();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long userId;
private String userName;
@ManyToMany
private Set<MedicineEntity> medicineId;
public long getUserId()
{
return userId;
}
public void setUserId(long userId)
{
this.userId = userId;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public Set<MedicineEntity> getMedicineId()
{
return medicineId;
}
public void setMedicineId(Set<MedicineEntity> medicineId)
{
this.medicineId = medicineId;
}
}
MedicineEntity.class:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class MedicineEntity
{
public MedicineEntity()
{
super();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long medicineId;
private String medicineName;
@ManyToMany
private Set<UserEntity> userId;
public long getMedicineId()
{
return medicineId;
}
public void setMedicineId(long medicineId)
{
this.medicineId = medicineId;
}
public String getMedicineName()
{
return medicineName;
}
public void setMedicineName(String medicineName)
{
this.medicineName = medicineName;
}
}
我正在考虑两个实体上的@ManyToMany 关系,但不确定。所以,请帮助我用正确的关系映射更正代码,并详细说明为什么使用这种关系,更正的作用是什么,请不要关闭这个问题。
该数据库的映射:
@Entity
@Table(name="user_entity")
public class UserEntity {
public class UserEntity() {}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_id")
private Integer userId;
@Column(name="user_name")
private String userName;
@ManyToOne
@JoinColumn(name="medicine_id")
private MedicineEntity medicineEntity;
...
}
@Entity
@Table(name="medicine_entity")
public class MedicineEntity() {}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="medicine_id")
private Integer medicineId;
@Column(name="medicine_name")
private String medicineName;
// (Optional) If you want a bidirectional association
@OneToMany(mappedBy="medicine_id")
private Set<UserEntity> userId;
...
}
这不是多对多,因为它需要额外的 table 来映射 UserEntity
和 MedicineEntity
之间的关系(table user_medicine
例如)。
有关 mapping associations 的更多详细信息,请参阅 Hibernate ORM 文档。
此外,我不鼓励使用原始类型作为标识符。您将无法将它们设置为 null 这样更容易弄清楚 当一个实体没有 id 时(否则你必须检查 0 或更大)