web-dev-qa-db-ja.com

アンダースコアが正しくない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;  
}
_

クエリ

_select program0_.program_id as program_1_5_, ...
_

JPAが「programId」を「program_id」に変更する理由、または構成が欠落している理由はありますか?

ありがとう

編集:申し訳ありませんが、クエリコード/情報を追加するのを忘れてしまいました。

Spring DataのJpaRepositoryインターフェイスを使用して、findAll()クエリを試しました。

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

spring-boot-jpa-column-name-annotation-ignored で説明されているように、列名はスネークケースに変換されています。

可能な解決策:

  • 命名戦略を設定する
  • 注釈に小文字の列名を使用します
17
David SN

http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

spring.jpa.hibernate.naming.strategyは、Hibernate 5を使用したSpring JPA実装でサポートされているプロパティではありません。

application.propertiesで以下のプロパティを使用します

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
19
Mohammed Rafeeq

マッピングできた

@ Column(name = "PersonFullName")

プライベート文字列PersonFullName;


データベーステーブルの列名「PersonFullName」にアンダースコアなし.

以下は私のために働いた。これをアプリケーション設定に追加し、@ Columnを使用して、モデルのプロパティの物理データベース列名を指定します。

@ Column(name = "PersonFullName")

Application.properties

spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

2
Shuchita Bora