当前位置: 首页 > 面试题库 >

在jpa中生成的表中的顺序错误

太叔俊侠
2023-03-14
问题内容

这(应该)是一件很简单的事情,但是我很努力。

我希望这样生成一个表:

id 
organizationNumber 
name

但是,当我查看数据库时,发现排序是错误的。有谁知道我该如何强制hibernate / jpa以正确的顺序生成表?

desc Organization;
+--------------------+--------------+------+-----+---------+----------------+
| Field              | Type         | Null | Key | Default | Extra          |
+--------------------+--------------+------+-----+---------+----------------+
| id                 | bigint(20)   | NO   | PRI | NULL    | auto_increment | 
| name               | varchar(255) | NO   |     | NULL    |                | 
| organizationNumber | varchar(255) | NO   | UNI | NULL    |                | 
+--------------------+--------------+------+-----+---------+----------------+

这是我的实体bean的样子:

@Entity
@NamedQuery(name = "allOrganizations", query = "SELECT org FROM Organization org order by name")
public class Organization {

    private Long id;
    private String organizationNumber;
    private String name;

    public Organization() {
    }

    public Organization(String name) {
        this.name = name;
    }

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }

    @SuppressWarnings("unused")
    private void setId(Long id) {
        this.id = id;
    }

    @NotEmpty
    @Column(unique=true, nullable=false)
    public String getOrganizationNumber() {
        return organizationNumber;
    }
       public void setOrganizationNumber(String organizationNumber) {
        this.organizationNumber = organizationNumber;
    }

问题答案:

Hibernate会按字母顺序生成列。根据这篇文章,原因如下:

它被排序以确保跨集群的确定性排序。

我们不能每次都依靠vm以相同的顺序返回方法,因此我们不得不做些事情。

显然,它以前是按照发生的顺序排列的,但是在3.2.0 GA和3.2.1 GA之间发生了变化。

我还发现,模式自动生成会按字母顺序为复合主键创建列,这似乎就像你的问题。该票证与主键的顺序更改有关,这会对索引性能产生负面影响。



 类似资料:
  • 问题内容: 关于JPA,我有以下问题: 我可以将元素的顺序保存在java.util.List中吗?在我的应用程序中,将元素放入列表的顺序很重要,但是从数据库中获取这些集合后,顺序却不一样(符合预期)。您能告诉我解决这个问题的方法吗? PS:我放入集合中的实体中没有字段可用来订购它们。 罗森 问题答案: 在JPA 1中,有一些骇人听闻的方法可以做到这一点,但是切换到JPA 2提供程序是最容易的。您正

  • 有没有可能以新的顺序生成一个已经存在的列表(例如,用名字填充)? 因此,列表填充如下: 现在列表中的第一个是“Player0”。 现在是否可以使用新的随机数开始此列表?所以就像下面的例子: 变成 因此,列表的顺序应该保持不变,只应更改列表中的第一个(当然还有所有后续的) 我希望你明白我的意思。

  • 问题内容: 我有3个相互依赖的xsd文件来构建我的元素定义。每个xsd文件都有其自己的名称空间。当我使用JAXB xjc生成类时,得到3个相应的包。到目前为止,一切都很好。 当我想使用解组器进行架构验证时,就会出现我的问题。为了避免不得不读取xsd文件,我从被解组的相关类中动态生成了模式。但是,由于该类依赖于其他2个包中的对象,因此除非我指定所有3个包,否则它无法生成架构。这已经不是一个非常实用的

  • 问题内容: 如果我有这个: 然后在a中找到b: 有没有办法对列表做类似的事情?像这样: False的结果是可以理解的-因为它正确地寻找了一个元素’de’,而不是(我恰好想要它做的)’d’之后是’e’ 这是可行的,我知道: 我可以处理数据以获得所需的内容-但是有没有一种简短的Pythonic方式可以做到这一点? 需要说明的是:我需要在此处保留顺序(b = [‘e’,’d’],应返回False)。 如

  • 我的 gradle 文件像这样 我在构建过程中遇到以下错误 我该如何解决这个问题

  • 我在eclipse Luna中使用JAXB从第三方XSD文件生成Java类。这个文件通常定义一个简单类型,它只是一个原始类型。例如: 然后将简单类型用于复杂类型的元素,例如: JAXB为复杂类型生成一个看起来完全正确的Java类: 但是,它还为@XmlElement(name="ChannelId")行生成以下JAXB错误 有人知道这个错误消息是什么意思吗?我不能更改XSD文件,但是应该怎么做来删