java - JPA 强制转换异常

标签 java database oracle jpa

我正在尝试使用 Oracle 和 JPA 构建数据库架构。我是 JPA 新手,我总是直接使用 sql。 我需要创建两个表:第一个包含当前 VOIP 调用,另一个包含这些调用的历史记录。这两个表是相同的。 在 JPA 中我这样写:

@Entity
@Table(name = "voip_currentCalls")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class VoipCurrentCall implements Serializable {

    private static final long serialVersionUID = 1L;
    protected CompositeID id;
    protected Timestamp startTime;
    protected Timestamp endTime;
    protected String calledNumber;
    protected String callingNumber;    
    protected Person contact;
    protected CallSource source;
    protected CallStatus status;
    protected CallType type;
    protected CallStage stage;

@Entity
@Table(name = "voip_historyCalls")
public class VoipHistoryCall extends VoipCurrentCall implements Serializable {
...

正如您所看到的,第二个表没有其他字段,但它只是第一个表的扩展。 当我尝试将 VoipCurrentCall 转换为 VoipHistoryCall 时,出现 java.lang.ClassCastException: VoipCurrentCall 无法转换为 VoipHistoryCall。

你有什么建议吗?我可能错过了一些东西。 提前感谢大家!

最佳答案

这就是 Java 的设计方式;您不能将父类(super class)强制转换为子类,只能反之亦然。和JPA没有任何关系。

关于java - JPA 强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475848/

相关文章:

适用于多个用户的 MySQL 数据库结构,每个用户有 100 到 1000 条唯一行

sql-server - 适用于 SQL Server 和 Oracle 的 LINQ to Entities

java - Open MQ 异常现象 : unexpectedly messages start to get stuck in the JMS Queue for a while before delivering them to the MDB

java - 如何检测Windows命名管道是否已关闭?

sql - 如何在数据库中查找最后一次修改

database - Play + Slick + HikariCP 应用程序中的加密数据库密码

java - JPA 1.0 还是 hibernate ?

java - setURLStreamHandlerFactory 和 "java.lang.Error: Factory already set"

java - JDBC 调用 Oracle 存储函数 - "table of struct"类型的 IN 参数

ruby-on-rails - rails : constraint violation on create but not on update