JPQL не работает на сервере - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над базой данных MySQL. Я использую Spring Boot JPA и создаю запрос с JPQL.

@Query(value="SELECT DISTINCT c FROM Category c WHERE c.distributorId " +
            "IN (SELECT DISTINCT d.distributorId FROM Distributor d WHERE d.partnerId=?1)")
    List<Category> findDistinctByPartnerId(long partnerId);

Он отлично работает и отлично, за исключением сервера (конечно). Проблема в том, что он запускает сервер (то есть классы сущностей загружаются правильно), но запрос отвечает на следующую ошибку:

ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) Table 'exampleDb.category' doesn't exist

Я никогда не добавлял имя базы данных в сущности, и это не даже не показывать в отладке sql:

Hibernate: select distinct category0_.CategoryId as Category1_5_, category0_.CatalogCode as CatalogC2_5_, category0_.CategoryName as Category3_5_, category0_.DistributorId as Distribu4_5_, category0_.ParentId as ParentId5_5_ from category categor
y0_ where category0_.DistributorId in (select distinct distributo1_.DistributorID from distributor distributo1_ where distributo1_.PartnerId=?)

Я искал ответ на это, но безрезультатно. Заранее спасибо за вашу помощь!

Категория Класс:

@Entity
@Builder(toBuilder = true)
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@NoArgsConstructor(access = AccessLevel.PACKAGE)
@Setter(value = AccessLevel.PUBLIC)
@Getter
@Table(name="category")
public class Category implements Serializable {
    @Id
    @Column(name="CategoryId")
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    String categoryId;
    @Column(name="CategoryName")
    String categoryName;
    @Column(name="CatalogCode")
    String catalogCode;
    @ManyToOne
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinColumn(name = "ParentId", referencedColumnName = "CategoryId")
    @OnDelete(action = OnDeleteAction.CASCADE)
    Category parent;
//    @OneToOne
//    @LazyCollection(LazyCollectionOption.FALSE)
//    @JoinColumn(name = "DistributorId", referencedColumnName = "DistributorId")
//    Distributor distributor;
    @Column(name="DistributorId")
    Long distributorId;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Category category = (Category) o;
        return categoryId.equals(category.categoryId) &&
                Objects.equals(categoryName, category.categoryName) &&
                Objects.equals(parent, category.parent) &&
                distributorId.equals(category.distributorId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(categoryId, categoryName, distributorId);
    }
}

Соединение через JNDI:

spring.datasource.jndi-name=java:/jdbc/mapper
spring.datasource.hikari.pool-name=mapper

1 Ответ

0 голосов
/ 21 апреля 2020

Как говорит исключение, таблица БД не существует, вы можете попробовать вставить запись в ваш application.properties, например, spring.jpa.hibernate.ddl-auto=update.

Возможно, ваша БД не имеет таблицы, и ваше приложение во время запуска предполагает, что таблица существует в БД.

И, если это не так, то не могли бы вы, пожалуйста, поделиться журналами времени запуска сервера, поможет в дальнейшей отладке причины такого поведения. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...