首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有后缀的自定义id生成器时发生的Hibernate错误

使用带有后缀的自定义id生成器时发生的Hibernate错误
EN

Stack Overflow用户
提问于 2020-06-25 04:37:31
回答 1查看 517关注 0票数 0

我试图为我的实体创建一个自定义id,但是当我试图这样做的时候,我得到了一个错误。

这是我的实体代码(部分)

代码语言:javascript
复制
@Entity
@Table(name = "notifications")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Notifications implements Serializable {

    private static final long serialVersionUID = 1L;


    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE , generator = "seq_notifications")
    @GenericGenerator(name = "seq_notifications",
        strategy = "com.mycompany.myapp.domain.PKeys.NotficationID")
    private String id;

下面是生成器类代码

代码语言:javascript
复制
public class NotficationID  extends SequenceStyleGenerator {
    public static final String DATE_FORMAT_PARAMETER = "dateFormat";
    public static final String DATE_FORMAT_DEFAULT = "%tY-%tm";

    public static final String NUMBER_FORMAT_PARAMETER = "numberFormat";
    public static final String NUMBER_FORMAT_DEFAULT = "%05d";

    public static final String DATE_NUMBER_SEPARATOR_PARAMETER = "dateNumberSeparator";
    public static final String DATE_NUMBER_SEPARATOR_DEFAULT = "_";

    private String format;

    @Override
    public Serializable generate(SharedSessionContractImplementor session,
                                 Object object) throws HibernateException {
        return String.format(format, LocalDate.now(), super.generate(session, object));
    }

    @Override
    public void configure(Type type, Properties params,
                          ServiceRegistry serviceRegistry) throws MappingException {
        super.configure(LongType.INSTANCE, params, serviceRegistry);

        String dateFormat = ConfigurationHelper.getString(DATE_FORMAT_PARAMETER, params, DATE_FORMAT_DEFAULT).replace("%", "%1");
        String numberFormat = ConfigurationHelper.getString(NUMBER_FORMAT_PARAMETER, params, NUMBER_FORMAT_DEFAULT).replace("%", "%2");
        String dateNumberSeparator = ConfigurationHelper.getString(DATE_NUMBER_SEPARATOR_PARAMETER, params, DATE_NUMBER_SEPARATOR_DEFAULT);
        this.format = dateFormat+dateNumberSeparator+numberFormat;
    }
}

当我试图插入一个值时,我会得到这个错误

代码语言:javascript
复制
2020-06-25 09:56:14.718 DEBUG 15572 --- [  XNIO-1 task-4] c.m.m.web.rest.NotificationsResource     : REST request to save Notifications : Notifications{id=null, notificationType='null', notificationDate='null', message='null'}
Hibernate: select next_val as id_val from seq_notifications for update
2020-06-25 09:56:14.744 ERROR 15572 --- [  XNIO-1 task-4] o.hibernate.id.enhanced.TableStructure   : could not read a hi value

java.sql.SQLSyntaxErrorException: Table 'relationships.seq_notifications' doesn't exist
代码语言:javascript
复制
2020-06-25 09:56:14.746  WARN 15572 --- [  XNIO-1 task-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1146, SQLState: 42S02
2020-06-25 09:56:14.746 ERROR 15572 --- [  XNIO-1 task-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : Table 'relationships.seq_notifications' doesn't exist
2020-06-25 09:56:14.753 ERROR 15572 --- [  XNIO-1 task-4] c.m.m.web.rest.NotificationsResource     : Exception in createNotifications() with cause = 'org.hibernate.exception.SQLGrammarException: error performing isolated work' and exception = 'error performing isolated work; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: error performing isolated work'

注意:我使用的是jhipster

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-25 14:29:34

我想问题出在桌子上,我做了一张桌子,一切都很好,谢谢亨里克,你是对的,

我创建了一个名为“seq”的表,但是数据类型是varchar(255),因为我的@Id是一个字符串

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62567960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档