Spring Boot - Ошибка при генерации последовательности в репозитории JPA - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующий класс сущностей:

@Entity
@Table(name = "\"TB03\"")
public class MDDEntity {

    private int mddId;
    private String version;
    private String dataType;
    private int min;


    @Id
    @SequenceGenerator(allocationSize = 1, initialValue = 1, sequenceName = "\"TB03_ID_seq\"", name = "tb03_id_seq")
    @GeneratedValue(generator = "tb03_id_seq", strategy = GenerationType.SEQUENCE)
    @Column(name = "\"TB03_ID\"", unique = true, nullable = false)
    public int getMddId() {
        return mddId;
    }
    public void setMddId(int mddId) {
        this.mddId = mddId;
    }

    @Column(name = "\"VERSION\"")
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }

    @Column(name = "\"DATATYPE\"")
    public String getDataType() {
        return dataType;
    }
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

    @Column(name = "\"MIN\"")
    public int getMin() {
        return min;
    }
    public void setMin(int min) {
        this.min = min;
    }
}

У меня есть следующий интерфейс хранилища:

@Repository
public interface MDDRepo extends JpaRepository<MDDEntity, Integer>{
    String selectedBranchDataQuery = "select * from \"TB03\" where \"VERSION\"=:branchName";

    @Query(nativeQuery = true,value = selectedBranchDataQuery)
    List<MDDEntity> getSelectedBranchData(String branchName);

}

Я попытался добавить свойство generator_mappings в false со ссылкой на несколько постов, на которые я ссылался для этой ошибки

у меня есть следующий application.properties:

spring.datasource.hikari.connectionTimeout=20000
spring.datasource.hikari.maximumPoolSize=5

## PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/LOCAL_DB
spring.datasource.username=//my username//
spring.datasource.password=//my password//
spring.datasource.initialization-mode=always

spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.id.new_generator_mappings=false
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

У меня есть следующий метод в моем классе обслуживания, где я выбираю детали исходной версии и копирую данные исходной версии в новый версия:

@Override
    public void copyVersionData(String newBranch, String sourceBranch) {

        List<MDDEntity> parentVersionLs = mddRepo.getSelectedBranchData(sourceBranch);

        for (MDDEntity parentVersion : parentVersionLs) {
            MDDEntity mdd = new MDDEntity();
            mdd.setDataType(parentVersion.getDataType());
            mdd.setMin(parentVersion.getMin());
            mdd.setVersion(newBranch);
            mddRepo.saveAndFlush(mdd);
        }
    }

Когда я использую собственный запрос вставки для сохранения данных, он работает. Но когда я использую существующий метод (saveAndFlu sh) из JPARepository, я получаю следующую трассировку стека ошибок:

Примечание. Я создал последовательность в PostgreSQL DB

org.postgresql.util.PSQLException: ERROR: relation "tb03_id_seq" does not exist
  Position: 17
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2510) ~[postgresql-42.2.10.jar:42.2.10]
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2245) ~[postgresql-42.2.10.jar:42.2.10]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:311) ~[postgresql-42.2.10.jar:42.2.10]
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:447) ~[postgresql-42.2.10.jar:42.2.10]
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:368) ~[postgresql-42.2.10.jar:42.2.10]
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159) ~[postgresql-42.2.10.jar:42.2.10]
    at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:109) ~[postgresql-42.2.10.jar:42.2.10]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-3.4.2.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.2.jar:na]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.id.SequenceGenerator.generateHolder(SequenceGenerator.java:116) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.id.SequenceHiLoGenerator.generate(SequenceHiLoGenerator.java:62) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:115) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:710) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:696) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_241]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
...