如果在Hibernate中使用@Embedded,如何覆盖@Column columnDefinition? 更具体地说,有一个例子:
DoStuffB.as_view()
和类ParentGrossNetTransformVariables:
DoStuffA.decorators
我用的是:
@Embedded
@AttributeOverrides({ @AttributeOverride(name = "isnettogross", column = @Column(name = "isnettogross", columnDefinition="char(1) default 1", nullable = false))})
public ParentGrossNetTransformVariables grossNetTransform;
自动应用数据库中的更改。现在我需要在多个实体中添加ParentGrossNetTransformVariables,但使用不同的默认值“isnettogross”,以便我尝试使用@AttributeOverrides但它不起作用。有没有办法做到这一点?
答案 0 :(得分:0)
我假设“它不起作用”,因为对列名的更改没有反映在数据库中。
hbm2ddl.auto=update
不会更新架构。因此,您对列名称所做的更改不会反映在数据库中。
将其更改为create
,以便根据所做的更改重新创建架构(如果有)。
<强>更新强>
在您的可嵌入类中使用insertable=false
属性和columnDefintion
,即
@Column(name = "isnettogross", columnDefinition="char(1) default 0", nullable = false, insertable=false)
和实体类
@AttributeOverrides({ @AttributeOverride(name = "isnettogross", column = @Column(name = "isnettogross", columnDefinition="char(1) default 1", nullable = false, insertable=false))})
这会忽略触发的INSERT语句中的感兴趣的列,从而插入配置的默认值。
updatable
也是如此,所以你可能也想根据你的用例使用它。
<强>最新:强>
我很困惑你的代码是如何工作的。我试过并经过测试;它工作正常。
我已经附上了代码,以防你想看看并交叉验证。
@Entity
public class Demo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Embedded
@AttributeOverride(name="flag", column=@Column(name="MainFlag", columnDefinition="char(1) default 1", insertable=false))
private Misc misc;
private Misc misc2;
// Getters and setters
@Embeddable
public class Misc {
@Column(name="flag", columnDefinition="char(1) default 0", insertable=false)
private boolean flag;
// Getters and setters
要测试的代码是一个简单的session.save(),它生成了查询
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into Demo (id) values (?)
同时附加数据库中的值:D