2017-05-19 7 views
0

春のデータに新しく、私は解決できない問題があります。 mySqlデータベースを持ち、OneToOneを使用して外部キーを使用してテーブルからデータを取得しようとしています。クエリを実行スプリングjpa - oneToOneセカンダリテーブルからデータを選択しない - mySql

Table 1 - location 
    id  int(11) pk nn UQ 
    zipcode varchar(11) NN UQ 
    city varchar(45) NN 
    lat  Double  NN 
    lon  Double  NN 

Table 2 - weather 
    id   INT(11) PK NN 
    location_id INT(11) NN 
    desc   varchar(45) NN 
Foreign Key name fk_location_id referenced table location column location_id referenced column id - pointed to location column id.` 

WeatherData.java列の定義 @OneToOne (fetch = FetchType.LAZY) @JoinColumn(name="fk_location_id") private LocationData location;

コード:log.infoラインに上記のコードでブレークポイントを設定し for (WeatherData weather : repository.findAll()) { log.info(weather.toString()); }

` や天候を見てレコードが返されました。ロケーション値はnullです。 OneToOne列名をidに設定してみると成功しませんでした。

私は間違っていますか?

答えて

0

は、私は、次の3つの事を試してみた:

  1. はFKの列の名前にあなたの@JoinColumnに値を設定します。
  2. FKエンティティクラス(LocationData)に正しい形式の@OneToOneアノテーションが付いていることを確認してください。 mappedBy値は、@OneToOneアノテーションと@JoinColumnアノテーションを持つWeatherDataのフィールドの名前です。
  3. エンティティクラスが@Entityを介してエンティティとして注釈されていることを確認してください。

このサイトのexampleを使用すると、天気表がブックテーブルになり、場所がbook_detailテーブルになります。つまり、使用していることを確認するための注釈がいくつかあります。まず、エンティティクラスにラベルが付けられていることを確認してください。すなわち:

@Entity 
@Table(name = "weather") 
public class WeatherData { 

エンティティ・クラスとテーブルが同じ名前を持っている場合、あなたは@Table注釈を省略することができます。しかし、私はそれを良い習慣とみなしているので、常にそれを追加するのが好きです。 WeatherDataだけでなく、すべてのエンティティクラスに注釈を付けるようにしてください。今、location_idについては、あなたの@JoinColumnはテーブルの列を参照する必要があります。

@OneToOne (fetch = FetchType.LAZY) 
@JoinColumn(name="location_id") 
private LocationData location; 

次に、あなたのLocationDataクラスで、あなたにも@OneToOneとlocationIdフィールドに注釈を付ける必要があります。

@OneToOne(mappedBy = "location") 
private WeatherData weather; 

詳細についてはリンク先の記事をご覧ください。私はこれが役立つことを願っています

@OneToOne (fetch = FetchType.EAGER) @JoinColumn(name="location_id") private LocationData location;

、それはlocationdataクラス内の文字列となっている必要がありますintとして定義された固定不正なデータタイプ:

+0

あなたが提供したリンクの例に従っていました。フェッチオプションをフェッチするように変更しましたが、現在はロケーションテーブルのtoStringオーバーライドの変換例外が発生しています。理由はわかりませんが、場所オーバーライドのtoStringメソッドを呼び出さないでください。 – Pauly

0

は、次のように変更して問題を修正しました。また、locationdata toStringメソッドのintとしてdoubleのセットに問題がありました。

+0

良い。私はあなたがそれを理解することができてうれしいです。運が良かった。 – jeffkempf

関連する問題