Oracle 不一致的数据类型:预期的时间戳编号

Oracle 不一致的数据类型:预期的时间戳编号,oracle,hibernate,Oracle,Hibernate,在基于Spring boot的项目中,我使用Hibernate 5.3.10作为我的ORM。假设我们有以下实体: @Entity @Table(name = "parent") @Inheritance(strategy = InheritanceType.JOINED) public class Parent { @EmbeddedId private EmbId id; public Id getId() { return id; } public void

在基于Spring boot的项目中,我使用
Hibernate 5.3.10
作为我的ORM。假设我们有以下实体:

@Entity
@Table(name = "parent")
@Inheritance(strategy = InheritanceType.JOINED)
public class Parent {
    @EmbeddedId
    private EmbId id;

    public Id getId() { return id; }
    public void setId(Id id) { this.id = id; }
}

@Entity
@Table(name = "child")
@PrimaryKeyJoinColumns({
    @PrimaryKeyJoinColumn(name = "id"),
    @PrimaryKeyJoinColumn(name = "date_time")
})
public class Child {
    @EmbeddedId
    private EmbId id;

    private String name;

    public Id getId() { return this.id; }
    public void setId(Id id) { this.id = id; }

    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
}
和可嵌入钥匙,如下所示:

@Embeddable
public class EmbId {
    @Column(name = "id")
    private Long id;

    @Column(name = "date_time")
    private Date dateTime;

    public Long getId() { return this.id; }
    public void setId(Long id) { this.id = id; }

    public Date getDateTime() { return this.dateTime; }
    public void setDateTime(Date dateTime) { this.dateTime = dateTime; }
}
@Entity
@Table(name = "child")
@PrimaryKeyJoinColumns({
    @PrimaryKeyJoinColumn(name = "id"),
    @PrimaryKeyJoinColumn(name = "date_time")
})
public class Child {
    @EmbeddedId
    private EmbId id;

    private String name;

    public Id getId() { return this.id; }
    public void setId(Id id) { this.id = id; }

    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
}
当我想对
实体进行多态查询时,JPA面临ORA-00932
不一致的数据类型:预期时间戳got NUMBER
,并且在控制台中看到以下sql:

select child0_.id as date_time1_25_0, child0_.date_time as id2_25_0, child0_1_.name as name3_3_0 from my_schema.child child0_ inner join my_schema.parent child0_1_ on child0_.id = child0_1_.date_time and child0_.date_time = child0_1_.id
似乎IDs的平等性被取代了。发生了什么事,我应该怎么解决


提前感谢。

幸运的是,我发现在
@PrimaryKeyJoinColumn
中添加
referencedColumnName
属性可以指导hibernate在正确的位置使用ID

因此,子类应如下所示:

@Embeddable
public class EmbId {
    @Column(name = "id")
    private Long id;

    @Column(name = "date_time")
    private Date dateTime;

    public Long getId() { return this.id; }
    public void setId(Long id) { this.id = id; }

    public Date getDateTime() { return this.dateTime; }
    public void setDateTime(Date dateTime) { this.dateTime = dateTime; }
}
@Entity
@Table(name = "child")
@PrimaryKeyJoinColumns({
    @PrimaryKeyJoinColumn(name = "id"),
    @PrimaryKeyJoinColumn(name = "date_time")
})
public class Child {
    @EmbeddedId
    private EmbId id;

    private String name;

    public Id getId() { return this.id; }
    public void setId(Id id) { this.id = id; }

    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
}