我希望以以下方式映射实体:
我有一个用户,他买了一辆车(特定的品牌、型号和变体)。
为此,我创建了以下类。
Car.java汽车
@Entity
@Table(name="CARS")
public class Car {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CAR_ID")
private int id;
@Column(name="CAR_MAKER")
private String maker;
@OneToMany(mappedBy="car")
private Collection<CarModel> models =new ArrayList<CarModel>();
......
Getters and Setters go here
......
}
CarModel.java
@Entity
@Table(name="CAR_MODELS")
public class CarModel {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="MODEL_ID")
private int modelId;
@Column(name="MODEL_NAME")
private String modelName;
@ManyToOne
@JoinColumn(name="CAR_ID")
private Car car;
@OneToMany(mappedBy="model")
private Collection<CarVariant> variants = new ArrayList<CarVariant>();
......
Getters and Setters go here
......
}
汽车变体.java
@Entity
@Table(name="CAR_VARIANT")
public class CarVariant {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column (name="VARIANT_ID")
private int variantId;
@Column(name="VARIANT_NAME")
private String variantName;
@Column(name="FUEL_TYPE")
private String fuelType;
@ManyToOne
@JoinColumn(name="MODEL_ID")
private CarModel model;
..........
Getters and setters go here
..........
}
最后,用户.java
@Entity
@Table(name="MASUSER")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="USER_REC_ID")
private int recordId;
@Column(name="USER_ID")
private String id;
@Column(name="USER_NAME")
private String name;
@Column(name="USER_EMAIL_ID")
private String emailId;
@Column(name="USER_PHONE")
private String phone;
private Collection<Car> cars = new ArrayList<Car>();
}
现在,我的问题是。
在现实生活中,用户可能拥有许多汽车,每辆汽车都有特定的品牌、型号和变体。我想用JPA / Hibernate实现这样的功能。
我可以定义@ManyToMany
与User
和Car
的关系。在这种情况下,如果我执行user.getCars()。getModels()
或user.getCars().getModels(().get(0)。getVariants()
我最终得到了数据库中的所有内容。
如何映射User
和Car
以获得以下输出?
--------------------------------------------------------
| USER_ID | CAR_ID | MODEL_ID | VARIANT_ID |
--------------------------------------------------------
| 1 | 1 | 2 | 3 |
--------------------------------------------------------
| 1 | 1 | 2 | 2 |
--------------------------------------------------------
| 3 | 2 | 1 | 1 |
--------------------------------------------------------
另外,如果您觉得我没有正确设计我的实体类,请随时告诉我如何改进。
谢谢
不清楚为什么需要这样一个包含嵌套关系中所有键的表。
我的两分钱:
@MappedSuperclass
public abstract class AbstractEntity
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private Long id;
......
Getters and Setters go here
......
}
@Entity
@Table(name = "MANUFACTURER")
public class Manufacturer extends AbstractEntity
{
@Column
private String name;
@OneToMany(mappedBy = "manufacturer")
private Set<CarModel> models = new LinkedHashSet<>();
......
Getters and Setters go here
......
}
@Entity
@Table(name = "CAR_MODEL")
public class CarModel extends AbstractEntity
{
@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "MANUFACTURER_ID")
private Manufacturer manufacturer;
@Column
private String name;
@OneToMany(mappedBy = "model")
private Set<CarVariant> variants = new LinkedHashSet<>();
......
Getters and Setters go here
......
}
@Entity
@Table(name = "CAR_VARIANT")
public class CarVariant extends AbstractEntity
{
@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "CAR_MODEL_ID")
private CarModel model;
@Column
private String name;
@Column(name="FUEL_TYPE")
private String fuelType;
@OneToMany(mappedBy="variant")
private Set<Car> cars = new LinkedHashSet<>();
......
Getters and Setters go here
......
}
@Entity
@Table(name = "CAR")
public class Car extends AbstractEntity
{
@NotNull
@ManyToOne(optional = false)
@JoinColumn(name = "CAR_VARIANT_ID")
private CarVariant variant;
@Column(name = "REGISTRATION_NUMBER")
private String registrationNumber;
@ManyToMany(mappedBy = "cars")
private Set<User> users = new LinkedHashSet<>();
......
Getters and Setters go here
......
}
@Entity
@Table(name = "USER")
public class User extends AbstractEntity
{
@Column
private String name;
@Column
private String email;
@Column
private String phone;
@ManyToMany
@JoinTable(name = "USER_CAR", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "CAR_ID"))
private Set<Car> cars = new LinkedHashSet<>();
......
Getters and Setters go here
......
}
集合
s:尽可能使用Set
s(LinkedHashSet
),或List
s当您需要@OrderCol的
MODEL_NAME
,只需使用NAME
@MepdSuperclass
,特别是如果您有所有实体的代理ID您现在可以:
Car car = ...;
String manufacturerName = car.getVariant().getModel().getManufacturer().getName();
String jpql = "select c from Car c where c.variant.model.name = 'Golf' and c.variant.fuelType = 'Diesel'";
如果像这样获取主对象
Criteria criteria=session.createCriteria(User.class);
List<Object> list=criteria.list();
User user=(User)list.get(0);
Car car=user.getCar();
CarModel carModel=car.getCarModel();
CarVarient carVarient=carModel.getCarVarient();
通过这种方式,您可以获取您试图获取的每个对象,但请记住,您使用的是<code>FethType。懒惰和cascadeType。所有在每个Pojo
我需要记录各种业务,他们的城市和他们在每个城市的分支机构。每个企业可能在不同的城市,在每个城市可能有不同的分支机构。
我有三个表在我的MySQL数据库,看起来像下面这些: 注意:我从那些表中删除了一些定义部分,比如AUTO_INCREMENT,以便使模式更简单。 我的问题是,我需要将这些表映射到实体类,比如和,但我不知道如何管理表中的列,以及如何管理实体中的这些关系。 我的第一个猜测是: 文件 文件 这些实体将生成我需要的三个表,但在表中没有我真正需要的列。把它放在那里很重要。我还可以创建第三个实体,例如,但我不
我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!
我有一个字符串数组和一个整数数组。如何使用第一个作为键,第二个作为值来创建地图? 如何在 Kotlin 中将 List 转换为 Map?不能解决这个问题;我有2个数组,想要一个地图。
快速总结我想要实现的目标。请给出实施或设计建议:) 我有两个表:用户,图像。在UserDO中,我希望保留一组所有用户的图像,以及单个图像,即用户的肖像(在我的示例中,该组将包括肖像): 在ImageDO中,我有一个userid作为外键来记录哪个用户上传了图像。但是它没有布尔值,因为认为一个用户可能会上传许多图像,但只有一个是肖像。 有什么方法可以实现这一点吗?或者我需要维护另一个表(例如,Port
我有以下模式: 项目(ID,名称)项目用户(项目ID,用户ID)用户(名称,ID) 实体如下 显然是一对多。项目可以有多个用户。 现在,我的目标是编写jooq查询,在那里我可以获取已经有相应用户的项目对象。 但是当预期约15时,查询将恢复千分之一的结果