如何在hibernate中以特定顺序创建表列?

时间:2017-10-26 04:32:17

标签: java sql-server hibernate

我的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的顺序?

3 个答案:

答案 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文件。使用您想要的任何顺序编辑它们。