我的question有重复但尚未回答。我是一个休眠的初学者,同时使用属性
从SQL Server中的实体自动创建表 <property name="hibernate.hbm2ddl.auto">create</property>
似乎表列的顺序不正确,直到我使用复合键才对我来说不是问题。现在问题是列的顺序与业务实体不一样。 这是我创建的业务实体
@Entity
public class SalesEstimateDtl implements Serializable {
@Id
private Long LedSalesEstID;
@Id
private Integer LedSalesEstRowNo;
这是生成的查询
CREATE TABLE [dbo].[SalesEstimateDtl](
[LedSalesEstRowNo] [int] NOT NULL,
[LedSalesEstID] [numeric](19, 0) NOT NULL,
PRIMARY KEY CLUSTERED
(
[LedSalesEstRowNo] ASC,
[LedSalesEstID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
如何使用LedSalesEstID更改LedSalesEstRowNo的顺序?
答案 0 :(得分:3)
使用 @EmbeddedId
@Entity
class Student{
@EmbeddedId
StudentInfo id;
String Name;
String Class;
Integer RollNo;
}
@Embeddable
class StudentInfo implements serializable {
Integer StudentID;
Integer StudentRowNo;
}
答案 1 :(得分:1)
事实上,使用注释指定的列创建的表不应该依赖于它的顺序。 SELECT *
语句也不能完全确保特定顺序的列。
来自Hibernate团队的响应,它看起来像是一个已知问题,并且不可能通过Hibernate设置列的顺序。发布here。
据我了解,我们可能不完全依赖Hibernate的hbm2ddl
来创建表。通过Hibernate创建表的那一刻,我们可以很好地改变它以根据需要对列进行排序。
希望这能回答你的问题!
答案 2 :(得分:0)
在Hibernate配置文件中使用下面的属性
<property name="hibernate.hbm2ddl.auto">showShemaUpdate</property>
然后在创建SessionFactory之前使用以下代码。
String file = "SqlSchema.sql";
SchemaUpdate update = new SchemaUpdate(configuration);
update.setOutputFile(file);
update.execute(false, false);
它将在一个包含所有DDL查询的位置创建SqlSchema.sql文件。使用您想要的任何顺序编辑它们。