2016-03-31 5 views
0

マップのあるクラスがあります。結合テーブルを使用してマッピングされます。Hibernate:マップ値の列名を定義する方法は?

@Entity 
@Table(name = "Sources") 
@Lazy(false) 
public class Sources {  
    @ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(name = "sources_lists", joinColumns = @JoinColumn(name = "list_id")) 
@MapKeyColumn(name = "source_id") 
public Map<Integer, Source> getSources() { return sources; } 
public void setSources(Map<Integer, Source> sourcesList) { this.adSources = adSourcesList; } 
private Map<Integer, Source> sources; 

@Override 
@Id @GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="id", unique = true, nullable = false, updatable = false) 
public Integer getId() { return super.getId(); } 
} 

"フィールドリスト 'に" sources0_sources'がありません "という例外が表示されます。 'list_id'の列名を 'ソース'に変更すると動作しますが、本番環境ではこれを実行できません。

CREATE TABLE `sources` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY (`id`), 
UNIQUE KEY `id` (`id`)); 

CREATE TABLE `source` (
`DTYPE` varchar(31) NOT NULL, 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`className` varchar(255) DEFAULT NULL, 
`name` varchar(255) DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `id` (`id`)); 

CREATE TABLE `sources_lists` (
list_id` int(11) NOT NULL, 
`source_id` int(11) NOT NULL, 
KEY `FK54DCBD0B4307D0FC` (`source_id`), 
KEY `FK54DCBD0B575FBECF` (`list_id`), 
CONSTRAINT `FK54DCBD0B4307D0FC` FOREIGN KEY (`source_id`) REFERENCES `source` (`id`), 
CONSTRAINT `FK54DCBD0B575FBECF` FOREIGN KEY (`list_id`) REFERENCES `sources` (`id`)); 
+0

この '@Table(name =" Sources ")'を大文字にすることを意味しましたか?ソースは小文字にする必要があります。 '@Table(name =" sources ")' – Drew1208

+0

大文字と小文字の両方を試しました。私が書いたように、DBの列名を 'list_id'から 'sources'に変更すると、Hibernateは文句を言うことがなくなります。問題はSources.getSources()メソッドにあります。 Hibernateは@ JoinColumn =(name = "list_id")アノテーションを無視するようです。 –

答えて

0

が、私は問題が列にいないことに気づいたが、それ以外代で:

テーブルがあり、私はそのidでSourceオブジェクトをマップすると、Hibernateがテーブルを結合するには3つの列があることを前提としています。親オブジェクトID(Sourcesクラス、list_id列)、オブジェクトID(Sourceクラス、source_id列)、およびマップキー用の別の列。私は他の質問を開いて、Hibernate内のオブジェクトをそのIDでマップする方法を尋ねます。

関連する問題