覆盖JPA @Id方法导致无效的列名异常

时间:2016-03-16 00:41:44

标签: java hibernate jpa

我正在使用Java 7和Hibernate 3.6.10.Final。以下代码使用JPA注释。

我正在重构一个类,将其id从int更改为long。有大量的引用和复杂的超类层次结构,不能一次修复。所以我创建了一个临时的getLongId方法并弃用了现有的getId方法,以便客户端可以进行转换。

这是我的父类

public class Parent{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "PK_id")
    public int getId() {
        return id;
    }

    // ..
}

这是必须将id更新为long的子类。

public class ChildXyz extends Parent{

    @Override
    @Deprecated // more details in the description at the start of this question
    public int getId() {
        return super.getId();
    }
}

以上代码导致

Caused by: java.sql.SQLException: Invalid column name 'id'.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:3052)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2473)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:680)
    at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:613)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:572)
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:739)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56)
    ... 48 more

hibernate不会识别超类中方法的注释吗?

重复@Id等子类中的注释不起作用,因为Hibernate会感到困惑。

1 个答案:

答案 0 :(得分:0)

很少有参考资料可以帮助您