2011-08-22 42 views
1

我有一个模型,看起来像这样:休眠ID列始终持续在生成的SQL

@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标识列的位置或更新SQL查询。 ID总是作为最后一列结束:

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

有什么办法强制它,否则?

+1

你为什么在意?订单无关紧要。 –

+1

它在Oracle中如果ABC列是CLOB,那么它必须是最后一个。 –

+0

你有一些参考来备份这一说法吗? Hibernate似乎可以很好地与clobs和oracle一起工作。例如,请参阅http://stackoverflow.com/questions/1644559/hibernate-on-oracle-mapping-string-property-to-clob-column。是不是在表中(而不是在插入语句中)CLOB必须处于最后位置? –

回答

0

这是一个已知的Hibernate限制;详情请参阅this thread。因为Hibernate会按字母顺序排列生成的SQL字段,所以为什么不改变CLOB字段的名称以确保最后到来,比如通过预先等待“zzz”使它成为zzzAbc

+0

“create table”中的顺序不是问题,如前所述,ID位于第一位。然而,Hibernate仍然建立查询,使得ID最后:(在'insert'中。 –