Hibernate 映射:忽略超级 class 字段
Hibernate mapping: ignore a super class field
我有一个 class A 和 class B
public class A{
int f1;
int f2;
int f2;
}
public class B extends A{
}
我的问题是如何忽略映射到 B 的 table 中的字段,例如 'f2'?
假设我对您的 post 所做的编辑获得批准,我将尝试回答。
在下面的代码中,我忽略了来自 class A 的字段 f2,即使用 AttributeOverride.
的 B 的 superclass
@Entity
@AttributeOverride(name = "f2", column = @Column(name = "f2_col", insertable = false, updatable = false)
public class B extends A{
}
如果您想进一步了解它,请参阅 AttributeOverride。
AttributeOverride with insertable = false
, updatable = false
应该会有帮助,但这也取决于你的继承策略。它只是帮助使从 superclass 继承的映射字段成为瞬态,以便其他一些 subclass 可以使用它,但对于这个特定的 subclass.
它将被忽略
如果你想有条件地将字段应用到子类,也许你应该重新设计你的类,使它们看起来像这样
public abstract class MyAbstractClass {
// ...
}
public class A extends MyAbstractClass {
int f1;
}
public class B extends MyAbstractClass {
int f2;
}
假设您将此应用到数据库 table 与 Hibernate 的映射,您可以在 MyAbstractClass 上使用 @MappedSuperclass
并在 A 和 B 上使用 @Entity
- 希望它有所帮助。
我有一个 class A 和 class B
public class A{
int f1;
int f2;
int f2;
}
public class B extends A{
}
我的问题是如何忽略映射到 B 的 table 中的字段,例如 'f2'?
假设我对您的 post 所做的编辑获得批准,我将尝试回答。 在下面的代码中,我忽略了来自 class A 的字段 f2,即使用 AttributeOverride.
的 B 的 superclass@Entity
@AttributeOverride(name = "f2", column = @Column(name = "f2_col", insertable = false, updatable = false)
public class B extends A{
}
如果您想进一步了解它,请参阅 AttributeOverride。
AttributeOverride with insertable = false
, updatable = false
应该会有帮助,但这也取决于你的继承策略。它只是帮助使从 superclass 继承的映射字段成为瞬态,以便其他一些 subclass 可以使用它,但对于这个特定的 subclass.
如果你想有条件地将字段应用到子类,也许你应该重新设计你的类,使它们看起来像这样
public abstract class MyAbstractClass {
// ...
}
public class A extends MyAbstractClass {
int f1;
}
public class B extends MyAbstractClass {
int f2;
}
假设您将此应用到数据库 table 与 Hibernate 的映射,您可以在 MyAbstractClass 上使用 @MappedSuperclass
并在 A 和 B 上使用 @Entity
- 希望它有所帮助。