QuerySyntaxException: информационный бюллетень не отображается

Я получаю сообщение об ошибке при развертывании моего приложения. Я получаю эту ошибку: Причина: org.hibernate.hql.internal.ast.QuerySyntaxException: бюллетень не сопоставлен [ВЫБЕРИТЕ n ИЗ Бюллетеня n, где n.user.username = :username]

Это com.app.domain.Информационный бюллетень

@Entity(name = "NEWSLETTER")
public class Newsletter {

  @Id
  @GeneratedValue(generator = "user_id_gen", strategy = GenerationType.SEQUENCE)
  @SequenceGenerator(name = "user_id_gen", sequenceName = "user_id_seq", allocationSize = 1, initialValue = 1)
  protected Long id;


  @OneToOne(mappedBy = "newsletter")
  @JoinColumn(name = "id_user", referencedColumnName = "id")
  private User user;

  @Column(name = "D_SUBSCRIBE_DATE")
  @Temporal(TemporalType.TIMESTAMP)
  private Date subscribeDate;

  @Column(name = "B_ISSUB")
  private Boolean isSub;

  /**
   *
   * @return
   */
  public User getUser() {
    return user;
  }

  /**
   *
   * @param user
   */
  public void setUser(User user) {
    this.user = user;
  }

  /**
   *
   * @return
   */
  public Date getSubscribeDate() {
    return subscribeDate;
  }

  /**
   *
   * @param subscribeDate
   */
  public void setSubscribeDate(Date subscribeDate) {
    this.subscribeDate = subscribeDate;
  }

  /**
   *
   * @return
   */
  public Boolean getSub() {
    return isSub;
  }

  /**
   *
   * @param sub
   */
  public void setSub(Boolean sub) {
    isSub = sub;
  }

}

Это com.app.domain.Пользователь

    @Entity(name = "USER")
public class User {

    @Id
    @GeneratedValue(generator = "user_id_gen", strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name = "user_id_gen", sequenceName = "user_id_seq", allocationSize = 1, initialValue = 1)
    private Long id;
    @Column(name = "USERNAME", nullable=false, length=20)
    private String username;
    @Column(name = "PASSWORD_HASH", nullable=false, length=128)
    private String passWordhash;
    @Column(name = "FIRST_NAME", nullable=false, length=50)
    private String firstName;
    @Column(name = "LAST_NAME", nullable=false, length=50)
    private String lastName;
    private LocalDate birthDay;
    private String address;
    private String city;
    private Integer postCode;
    private Integer rn;
    @Column(nullable=false, length=100)
    private String email;
    private String phoneNumber;

  @OneToOne
  private Newsletter newsletter;

    public Long getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public LocalDate getBirthDay() {
        return birthDay;
    }

    public String getAddress() {
        return address;
    }

    public String getCity() {
        return city;
    }

    public Integer getPostCode() {
        return postCode;
    }

    public Integer getRn() {
        return rn;
    }

    public String getEmail() {
        return email;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setBirthDay(LocalDate birthDay) {
        this.birthDay = birthDay;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public void setPostCode(Integer postCode) {
        this.postCode = postCode;
    }

    public void setRn(Integer rn) {
        this.rn = rn;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getPassWordhash() {
        return passWordhash;
    }

    public User setPassWordhash(String passWordhash) {
        this.passWordhash = passWordhash;
        return this;
    }

    public String getUsername() {
        return username;
    }

    public User setUsername(String username) {
        this.username = username;
        return this;
    }

  public Newsletter getNewsletter() {
    return newsletter;
  }

  public void setNewsletter(Newsletter newsletter) {
    this.newsletter = newsletter;
  }
}

Это мой информационный бюллетеньДао:

    @Transactional
public interface NewsletterDao extends JpaRepository<Newsletter, Long> {

  @Query("SELECT n FROM Newsletter n where n.user.username = :username")
  Optional<Newsletter> findByUsername(@Param("username") String username);

}

Это моя конфигурация файла persistence.xml.

    <?xml version = "1.0" encoding = "UTF-8" ?>
<persistence xmlns = "http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
    version = "2.2">

    <persistence-unit name = "test">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <mapping-file>META-INF/orm.xml</mapping-file>
        <class>com.app.domain.User</class>
    <class>com.app.domain.Newsletter</class>
    </persistence-unit>

</persistence>

Я получаю эту ошибку:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Newsletter is not mapped [SELECT n FROM Newsletter n where n.user.username = :username]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:713)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:103)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350)
at com.sun.proxy.$Proxy45.createQuery(Unknown Source)
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87)
... 82 more

Может кто-нибудь помочь мне ? Я немного потерян.

Спасибо !

Что произойдет, если вы удалите параметр name из @Entity?

Andronicus 06.03.2019 16:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
83
2

Ответы 2

Добавьте класс Newsletter в свой файл сопоставления orm.xml

Я работаю с ОП. Удаление параметра name из @Entity дает ту же ошибку. А это наш файл orm.xml:

      <?xml version = "1.0" encoding = "UTF-8"?>
<entity-mappings version = "2.1"
    xmlns = "http://xmlns.jcp.org/xml/ns/persistence/orm"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd">

  <persistence-unit-metadata>
        <persistence-unit-defaults>
            <schema>public</schema>
        </persistence-unit-defaults>
    </persistence-unit-metadata>   

</entity-mappings>

Мы делаем что-то не так? Спасибо !

Другие вопросы по теме