我正在从将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列的表提供简化的访问和操作。 即。
BaseDTO->DBAbstractClass1->DBAbstract2->MyClassDTO
BaseDTO->DBAbstractClass1->DBAbstract3->AnotherADTO
BaseDTO->DBAbstractClass2->DBAbstract4->AnotherBDTO
等
现在我发现我有一个映射到MyClassDTO的表,它没有'id'列(它有一个名为'identifier'的列),但由于架构限制,按正常原因执行:
[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 但我不确定它能解决我的确切问题。
这可能是一个简单的覆盖,但要小心,没有副作用。 任何人?
答案 0 :(得分:1)
我发现没有简单优雅的解决方案。
我所做的是反转层次结构以创建两个HelperDTO类,一个扩展另一个,第二个包含id属性。 HelperDTO没有Id成员,HelperWithIdDTO没有Id成员 即。
HelperDTO->MyClassDTO (classes that do not use id)
和
HelperDTO->HelperWithIdDTO->OtherDTO (classes that use id)
答案 1 :(得分:0)
在子类中尝试覆盖这些对super的更改吗?
@MappedSuperclass
public abstract class BaseDTO
{
public int id;
public int getId() {
return id;}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public void setId(int id) {
this.id = id;}
}