JPA/Hibernate中的继承映射是指将面向对象编程中的继承关系映射到关系型数据库中的技术。由于关系型数据库没有直接的继承概念,JPA提供了几种策略来实现这种映射。
特点:
优势:
缺点:
示例代码:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "VEHICLE_TYPE")
public abstract class Vehicle {
@Id @GeneratedValue
private Long id;
private String manufacturer;
// getters and setters
}
@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
private int seatCount;
// getters and setters
}
@Entity
@DiscriminatorValue("TRUCK")
public class Truck extends Vehicle {
private double payloadCapacity;
// getters and setters
}
特点:
优势:
缺点:
示例代码:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Animal {
@Id @GeneratedValue
private Long id;
private String species;
// getters and setters
}
@Entity
public class Dog extends Animal {
private String barkPitch;
// getters and setters
}
@Entity
public class Cat extends Animal {
private boolean likesCream;
// getters and setters
}
特点:
优势:
缺点:
示例代码:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Payment {
@Id @GeneratedValue
private Long id;
private BigDecimal amount;
// getters and setters
}
@Entity
public class CreditCardPayment extends Payment {
private String cardNumber;
private String expiryDate;
// getters and setters
}
@Entity
public class BankTransferPayment extends Payment {
private String accountNumber;
private String bankCode;
// getters and setters
}
问题:鉴别器列值冲突或未正确配置 解决:确保每个子类有唯一的@DiscriminatorValue,父类有@DiscriminatorColumn
问题:JOINED策略查询性能差 解决:
问题:TABLE_PER_CLASS策略下多态查询效率低 解决:
问题:TABLE_PER_CLASS策略下主键可能冲突 解决:
没有搜到相关的文章