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

HiLo生成器策略不起作用

吴驰
2023-03-14
问题内容

我是新来的hibernate。我想做的是用来@CollectionId为我的Address类生成一个标识符。我已经Collection为此使用接口。但是,当我使用@GenericGenerator策略并将其设置为hilo时,它将引发异常。这是我的代码:

@Entity
@Table(name = "USER_DETAILS")
public class UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int userId;
    private String userName;

    @ElementCollection
    @JoinTable(name="USER_ADDRESS",
        joinColumns=@JoinColumn(name="USER_ID")
    )

    @GenericGenerator(name = "hilo-gen", strategy = "hilo")
    @CollectionId(columns = { @Column(name="ADDRESS_ID") }, generator = "hilo-gen", type = @Type(type="long"))
    private Collection<Address> address = new ArrayList<Address>();

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Collection<Address> getAddress() {
        return address;
    }

    public void setAddress(List<Address> address) {
        this.address = address;
    }
}

我得到以下异常:

Exception in thread "main" org.hibernate.MappingException: Could not instantiate id generator [entity-name=null]
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:121)
    at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:259)
    at org.hibernate.persister.collection.AbstractCollectionPersister.<init>(AbstractCollectionPersister.java:429)
    at org.hibernate.persister.collection.BasicCollectionPersister.<init>(BasicCollectionPersister.java:57)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:152)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:140)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:408)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at com.hbt.HibernateTest.main(HibernateTest.java:35)
Caused by: java.lang.UnsupportedOperationException: Support for 'hilo' generator has been removed
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.getIdentifierGeneratorClass(DefaultIdentifierGeneratorFactory.java:132)
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:112)
    ... 14 more

我正在使用最新的hibernate模式。我该怎么办?


问题答案:

不再支持Hilo,这应该可以工作

@GenericGenerator(name="sequence-gen",strategy="sequence")


 类似资料:
  • 我正在编写一个流程,需要从API中提取JSON数据,并将其提供给另一个要求字段名称完全小写的系统。我试图利用内置的LowerCaseStrategy,但这不起作用。我尝试过的一个例子是:

  • 问题内容: 我正在通过类似的东西初始化没有任何XML的Hibernate 我的班级使用的ID如 所用的发电机,这似乎是更换为过时和和什么。它用 并且似乎允许通过配置 但这就是我所能找到的全部。我想我必须设置一些属性“ xxx.yyy.increment_size”或以其他方式将其传递给Hibernate,但是我看不到如何做。 我知道,但似乎被完全忽略了 问题答案: 我想您正在寻找如何为设置属性。

  • 我遇到了Hibernate映射问题:无法解释ID生成器策略:堆栈跟踪: 我的Custome ID生成器类如下所示: 我在谷歌上搜索过,但找不到解决方案。请让我知道,如果我做了任何错误或有解决办法。谢谢

  • 我需要一个自定义id生成器,保存最后使用的id,而不是下一个可用的,所以基于这个答案https://stackoverflow.com/a/10648572/187423我创建了一个自定义生成器扩展TableGenerator。 我已经在调试模式下确定我的自定义生成器没有被添加到org.hibernate.id.factory.internal.DefaultIdfierGeneratorFact

  • 我有一个java Spring Boot项目,需要在MySQL和Oracle数据库上运行。该项目在数据库中有多个主键设置为自动递增的实体。 我已经确定,Hibernate的@GenericGenerator在本机策略中将支持MySQL(作为身份)和Oracle(作为序列),这取决于DB的类型。但是我似乎找不到如何在GenericGenerator中为oracle序列设置allocationSize

  • 在修订工作中-Laravel 5.8-我面临一个奇怪的行为: 应用程序”政策”Customer策略 注册策略 应用程序”提供商”AuthServiceProvider 路由»网络 奇怪的是:上面的第一个路由-'客户/创建'-不工作,试图访问该页面得到一个403/禁止的代码。但是另外两个——“customers.edit”、“customers.update”——和预期的一样工作!!?!。