質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

529閲覧

SPRING MVC JPA 実行時404になる

bear123

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2018/05/12 04:50

編集2018/05/12 12:02

###SPRING MVC JPA にて1つのテーブルの2カラムから別テーブルへJOINを行うとサーバーで実行時404になる

Aテーブルの2カラムからBテーブルにJOINをして名称を取得する処理を作成したいです。

aテーブル[商品id、倉庫id、エージェントid](この倉庫idと、エージェントidをbテーブルの取引先idとjoinしてそれぞれの名称を取得したい)
bテーブル[取引先id、取引先名称]

エンティティとpersistence.xmlはJPAツールにて作成を行っています。

発生している問題・エラーメッセージ

ECLIPSE内のPIVOTAL TC SERVER 及びTOMCAT V9 SERVERにて実行するとブラウザにてルートページ時点で404となります。

ログが出ていました。

エラーログ WARN XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/application-config.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory ERROR ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/application-config.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: model.TblWarehouseStock column: warehouse_cd (should be mapped with insert="false" update="false") 重大: クラス [org.springframework.web.context.ContextLoaderListener] のリスナインスタンスにコンテキスト初期化イベントを送信中の例外です org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/application-config.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: model.TblWarehouseStock column: warehouse_cd (should be mapped with insert="false" update="false")

該当のソースコード

JAVA

1aテーブル 2 3import java.io.Serializable; 4import javax.persistence.*; 5 6 7/** 8 * The persistent class for the tbl_warehouse_stock database table. 9 * 10 */ 11@Entity 12@Table(name="tbl_warehouse_stock") 13@NamedQuery(name="TblWarehouseStock.findAll", query="SELECT t FROM TblWarehouseStock t") 14public class TblWarehouseStock implements Serializable { 15 private static final long serialVersionUID = 1L; 16 17 @EmbeddedId 18 private TblWarehouseStockPK id; 19 20 @Column(name="free_quantity") 21 private int freeQuantity; 22 23 //uni-directional many-to-one association to TblMSupplier 24 @ManyToOne 25 @JoinColumn(name="warehouse_cd") 26 private TblMSupplier tblMSupplier1; 27 28 //uni-directional many-to-one association to TblMSupplier 29 @ManyToOne 30 @JoinColumn(name="agent_cd") 31 private TblMSupplier tblMSupplier2; 32 33 public TblWarehouseStock() { 34 } 35 36 public TblWarehouseStockPK getId() { 37 return this.id; 38 } 39 40 public void setId(TblWarehouseStockPK id) { 41 this.id = id; 42 } 43 44 public int getFreeQuantity() { 45 return this.freeQuantity; 46 } 47 48 public void setFreeQuantity(int freeQuantity) { 49 this.freeQuantity = freeQuantity; 50 } 51 52 public TblMSupplier getTblMSupplier1() { 53 return this.tblMSupplier1; 54 } 55 56 public void setTblMSupplier1(TblMSupplier tblMSupplier1) { 57 this.tblMSupplier1 = tblMSupplier1; 58 } 59 60 public TblMSupplier getTblMSupplier2() { 61 return this.tblMSupplier2; 62 } 63 64 public void setTblMSupplier2(TblMSupplier tblMSupplier2) { 65 this.tblMSupplier2 = tblMSupplier2; 66 } 67 68} 69

JAVA

1bテーブル 2 3import java.io.Serializable; 4import javax.persistence.*; 5 6 7/** 8 * The persistent class for the tbl_m_suppliers database table. 9 * 10 */ 11@Entity 12@Table(name="tbl_m_suppliers") 13@NamedQuery(name="TblMSupplier.findAll", query="SELECT t FROM TblMSupplier t") 14public class TblMSupplier implements Serializable { 15 private static final long serialVersionUID = 1L; 16 17 @Id 18 @Column(name="suppliers_cd") 19 private String suppliersCd; 20 21 @Column(name="suppliers_name") 22 private String suppliersName; 23 24 public TblMSupplier() { 25 } 26 27 public String getSuppliersCd() { 28 return this.suppliersCd; 29 } 30 31 public void setSuppliersCd(String suppliersCd) { 32 this.suppliersCd = suppliersCd; 33 } 34 35 public String getSuppliersName() { 36 return this.suppliersName; 37 } 38 39 public void setSuppliersName(String suppliersName) { 40 this.suppliersName = suppliersName; 41 } 42 43}

試したこと

aテーブルの1カラムからbテーブルにJOINであれば上記の問題は発生しません。
上記の例でいえば倉庫id、代理店idのどちらか一つだけであれば問題が発生ことを確認しました。

補足情報(FW/ツールのバージョンなど)

JAVA 1.8.0_171
Spring Tool Suite
Version: 3.9.4.RELEASE
Build Id: 201804120921
Platform: Eclipse Oxygen.3a (4.7.3a)

SPRING MVC

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/05/12 06:56

質問文中の2項目というjoinのbテーブル側の項目説明が不足していませんか。
退会済みユーザー

退会済みユーザー

2018/05/12 10:39

問題は tbl_m_suppliers に id が存在しないからでしょうね ※ @ID ではない
退会済みユーザー

退会済みユーザー

2018/05/12 10:41

あと 同じ項目名が insert/update が二重定義されてるとか 回答欄たりなくなるきもするな
m.ts10806

2018/05/12 11:48

タイトルに色々入れるのではなくタグを設定してください。冒頭に入れることでタイトルだけで要件が分かりづらくなることの方が良くありません。
bear123

2018/05/12 11:56

左様でしたか。 JPAツールで作成したらこの様になったのですがその二点教えていただけますか。
bear123

2018/05/12 12:06

タグは可能なものは設定してありましたのでタイトル変更しました。問題への回答をお願いします。
退会済みユーザー

退会済みユーザー

2018/05/12 12:45

自動でつくったといいつつ JPA のツールでつくったら双方向に MTO、OTMができるか両方できないかだしな
bear123

2018/05/12 12:48

そうですか。両方できないのでやってみると発生しないんですよね。
退会済みユーザー

退会済みユーザー

2018/05/12 12:51

エラーメッセージに アノテーションについてでてるけどそれに対しては理解しようとしたのかい?
bear123

2018/05/12 13:03 編集

エラーがアノテーションについてとは理解していませんでした。どの文言がそれに該当します?
bear123

2018/05/12 14:18

エラーメッセージ追って修正したらわかりました。
bear123

2020/05/05 05:38

ここのコメントは具体的でなく余計に分かりづらくなりますので 参照しないほうが良いです。
guest

回答1

0

自己解決

この様な形で記載すると解決しました。
変数名は変更しなくてもいいです。

java

1 2 //uni-directional many-to-one association to TblMSupplier 3 @ManyToOne 4 @JoinColumn(name="warehouse_cd",insertable = false, updatable = false) 5 private TblMSupplier tblMSupplierWarehouse; 6 7 //uni-directional many-to-one association to TblMSupplier 8 @ManyToOne 9 @JoinColumn(name="agent_cd",insertable = false, updatable = false) 10 private TblMSupplier tblMSupplierAgent;

*idに関してはJPAツールでそのクラスが自動作成されています。

投稿2018/05/12 15:11

編集2018/05/12 23:13
bear123

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問