Ste*_*tez 4 java hibernate jpa
有没有办法使用 Hibernate 或 JPA 注释来覆盖子类中字段的可选性?举个例子:
这是一个定义了许多公共字段的基类。对于下面的示例,我仅显示我想要在几个子类中覆盖的单个字段。在 中@MappedSuperclass,此字段是必需的(不允许为空)。
@MappedSuperclass
public abstract class GenericLog {
protected String sessionId;
@Basic(optional = false)
@Column(name = FIELD__SESSION_ID__COLUMN, length = 50)
public String getSessionId() {
return sessionId;
}
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个子类。它具有与父类中定义的相同的 sessionId 字段,唯一的区别是该字段在此类中应允许为空。
@Entity
@Table(name = LogError.TABLE_NAME)
@Cache(usage = CacheConcurrencyStrategy.NONE)
public class LogError extends GenericLog {
@Basic(optional = true)
@Column(name = FIELD__SESSION_ID__COLUMN, length = 50)
@Override
public String getSessionId() {
return super.getSessionId();
}
@Override
public void setSessionId(String sessionId) {
super.setSessionId(sessionId);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用@AttributeOverride注释,但即使指定属性也不起作用nullable。
PS 我正在使用 Hibernate 4.1.9(JPA 2.0 注释)。
@Basic我认为和之间存在一些未记录的相互作用@Column,从而阻止了 的影响@AttributeOverride。
删除@Basic并将注释移动到字段级别而不是方法级别对我来说是成功的:
这是我的设置:
@MappedSuperclass
public abstract class GenericLog {
@Column(name = "sessionId", length = 50, nullable = false)
protected String sessionId;
// getter setter here
}
@Entity
@Table(name = "child")
@AttributeOverride(column = @Column(name = "sessionId", length = 50, nullable = true), name = "sessionId")
public class ChildEntity extends SuperClass {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// getter setter here
}
@Entity
@Table(name = "child2")
public class ChildEntity2 extends SuperClass {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// Getter setter here
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |