Столбец JPA с неправильным подчеркиванием

Я использую JPA для доступа к базе данных и аннотировал каждый столбец с правильным именем. Теперь, если я выполняю запрос (например, findAll()), он возвращает

Unknown column 'program0_.program_id' in 'field list'

Правильное сообщение об ошибке program_id неизвестно, поскольку настоящее имя programId.

Модели: программа

  @Entity
  @Table(name = "programs")
  @XmlRootElement
  public class Program implements Serializable {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          @Basic(optional = false)
          @Column(name = "programId")
          private Long programId;
          @ManyToMany
          @JoinTable(
                  name = "programlabels",
                  joinColumns = {
                    @JoinColumn(name = "program", referencedColumnName = "programId")},
                  inverseJoinColumns = {
                    @JoinColumn(name = "label", referencedColumnName = "labelId")})
          private Collection<Label> labels;
        }

Метка

@Entity
@Table(name = "labels")
@XmlRootElement
public class Label implements Serializable {
  @Id
  @Basic(optional = false)
  @NotNull
  @Size(min = 1, max = 100)
  @Column(name = "labelId")
  private String labelId;  
}

Query

select program0_.program_id as program_1_5_, ...

Есть ли причина, по которой JPA меняет "programId" на "program_id", или мне не хватает какой-либо конфигурации?

спасибо

Изменить: О, извините, забыл добавить код запроса/информацию.

Я использую интерфейс Spring Data JpaRepository и пробовал запрос findAll().

@Repository
public interface ProgramRepository extends JpaRepository<Program, Long> {}

Ответ 1

Как описано в spring-boot-jpa-column-name-annotation-ignored, ваше имя столбца преобразуется в случай змейки.

Возможные решения:

  • Настройка стратегии именования
  • Используйте имена нижних регистров в ваших аннотациях

Ответ 3

Смогли карту

@Column (name = "PersonFullName")

private String PersonFullName;


имя столбца таблицы базы данных " PersonFullName " без подчеркивания.

Ниже работал для меня. Добавьте это в настройках приложения и затем используйте @Column, чтобы указать имя столбца физической базы данных для свойства модели.

@Column (name = "PersonFullName")

В приложении. Свойства

spring.jpa.hibernate.naming.implicit-Strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-стратегии = org.hibernate.boot.model.naming.PhysicalNardStrategyStand