【问题标题】:Hibernate ID column always last in generated SQLHibernate ID 列在生成的 SQL 中总是最后一个
【发布时间】:2011-11-01 11:59:27
【问题描述】:

我有一个看起来像这样的模型:

@MappedSuperclass
@AccessType("field")
public abstract class BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "generator")
    @Column(name = "ID")
    private Long id;
}

@Entity
@Table(name = "MODEL")
@AccessType("field")
public class Model extends BaseEntity {
    @Column(name="ABC")
    private String abc;
}

无论我尝试什么,我似乎都无法在生成的 INSERT 或 UPDATE sql 查询中移动 ID 列的位置。 ID 总是以最后一列结束:

insert into MODEL (ABC, ID) values (?, ?)

有什么办法可以强制吗?

【问题讨论】:

  • 你为什么在乎?顺序无关紧要。
  • 如果 ABC 列是 CLOB,那么它在 Oracle 中是这样的,那么它必须是最后一个。
  • 你有什么参考资料来支持这个说法吗? Hibernate 似乎与 clobs 和 oracle 一起工作得很好。例如,请参阅stackoverflow.com/questions/1644559/…。不是在表中(而不是在插入语句中)CLOB 必须在最后一个位置吗?
  • 这描述了我完全相同的问题:odi.ch/weblog/posting.php?posting=496
  • 您是否尝试过在 Model 类上或在 ID 字段的覆盖 getter 上使用 AttributeOverride?​​span>

标签: hibernate


【解决方案1】:

这是一个已知的 Hibernate 限制;详情请见this thread

由于 Hibernate 将按字母顺序对生成的 SQL 字段进行排序,为什么不更改 CLOB 字段的名称以确保它位于最后,例如通过在其前面加上“zzz”使其变为zzzAbc

【讨论】:

  • create table 中的顺序不是问题,如您所说,ID 位于第一个位置。然而,Hibernate 仍然构建查询,使得 ID 在最后 :( 在 insert.
猜你喜欢
  • 2013-12-22
  • 2020-11-14
  • 1970-01-01
  • 2012-12-24
  • 2018-08-10
  • 2013-02-26
  • 2023-02-18
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多