我正在从将 id 映射到列的实用程序基类扩展
@MappedSuperclass
public abstract class BaseDTO
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int id;
public int getId() {
return id;}
public void setId(int id) {
this.id = id;}
}
此类用于许多派生类,以提供对包含 id 列的表的简化访问和操作。IE
BaseDTO->DBAbstractClass1->DBAbstract2->MyClassDTO
BaseDTO->DBAbstractClass1->DBAbstract3->AnotherADTO
BaseDTO->DBAbstractClass2->DBAbstract4->AnotherBDTO
等等
现在我发现我有一个映射到 MyClassDTO 的表,它没有“id”列(它有一个名为“标识符”的列),但由于架构限制,按正常原因扩展:
[org.hibernate.util.JDBCExceptionReporter] SQL Error: 1054, SQLState: 42S22
[org.hibernate.util.JDBCExceptionReporter] Unknown column 'this_.id' in 'field list'
我尝试将 id 成员覆盖为@Transient,添加一个新的@Id 等,但总是得到上面的错误。
要么我找到一种“忽略”或替换继承 id 的方法,要么我需要复制我继承的类而不扩展 BaseDTO,这是一个好的程序员应该避免的事情。
我在 Hibernate 看到过类似的东西:How override an attribute from mapped super class 但我不确定它是否能解决我的确切问题。
这可能是一个简单的覆盖,但要小心没有副作用。有接盘侠吗?