我正在使用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会感到困惑。
答案 0 :(得分:0)
很少有参考资料可以帮助您
方法1 how-to-override-a-jpa-entity-id-column
使用@PrimaryKeyJoinColumn
方法2:how-override-getter-of-id-column-in-jpa-configuration
在子类中同时使用@AttributeOverride
和@Override
;父母有@MappedSuperclass
。