我知道这个论点有几个问题,但我认为我的情况有点不同。
我正在尝试使用JPA表示法而不是XML映射。在我的查询中总是有一个不受欢迎的dtype列,我不想同时使用鉴别器列和公式。
我有四个课程如下:
第一个名为ObjectUUID
。所有类都扩展了这个超类。
此类仅用于定义id字段,如下所示:
@MappedSuperclass
public class ObjectUUID {
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
protected String id;
// getter and setter and other static methods
}
然后我有另一个名为TrackSys
的类,我在其中定义了其他字段(作为插入日期和更新日期),如下所示:
@MappedSuperclass
public class TrackSys extends ObjectUUID{
@Column(name="dt_ins")
private CustomCalendar dtInsert;
@Column(name="dt_upd")
private CustomCalendar dtUpdate;
// getter and setter
}
第三个和第四个类是在DB上映射的bean,如下所示:
@Entity
@Table(name="patient")
public class PatientUUID extends TrackSys {
}
@Entity
@Table(name="patient")
public class Patient extends PatientUUID {
@Column(name="surname")
private String surname;
@Column(name="name")
private String name;
@Column(name="cf")
private String cf;
// getter and setter
}
我定义了一个存储库来查询我的患者表,如下所示:
public interface PatientRepository extends JpaRepository<Patient, Long> {
List<Patient> findBySurname(String surname);
}
当我的Patient查询运行时,生成的SQL如下:
select patient0_.id as id2_2_, patient0_.dt_ins as dt_ins3_2_,
patient0_.dt_upd as dt_upd4_2_, patient0_.cf as cf7_2_,
patient0_.surname as surname8_2_, patient0_.name as name11_2_,
from patient patient0_ where patient0_.dtype='Patient'
and patient0_.surname=?
现在...
我不想要dtype列,我不想使用鉴别器公式。
使用XML映射,无需指定特定属性即可。
使用JPA注释我按顺序尝试:
使用@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
但dtype始终存在
使用@Inheritance(strategy = InheritanceType.JOINED)
但dtype始终存在
现在,我对dtype的感觉只是讨厌,我怎么能得到这个简单的查询,如下所示:
select patient0_.id as id2_2_, patient0_.dt_ins as dt_ins3_2_,
patient0_.dt_upd as dt_upd4_2_, patient0_.cf as cf7_2_,
patient0_.surname as surname8_2_, patient0_.name as name11_2_,
from patient patient0_ where patient0_.surname=?