JPA鉴别器不受欢迎

时间:2016-10-23 11:24:10

标签: java jpa inheritance javabeans

我知道这个论点有几个问题,但我认为我的情况有点不同。

我正在尝试使用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=?

0 个答案:

没有答案