Hibernate:如何定义地图值列名?

时间:2016-03-31 15:33:22

标签: java hibernate jpa

我有一个里面有地图的课程。它使用连接表进行映射。

@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(); }
}

我收到以下例外:&#34;未知栏&#39; sources0_.sources&#39;在&#39;字段列表&#39;&#34;。 当我更改&#39; list_id&#39; “&quot;来源”的列名称事情有效,但我不能在生产中这样做。

表格是:

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`));

1 个答案:

答案 0 :(得分:0)

我意识到问题不在于列,而是在其他方面:我希望用它的id映射Source对象,Hibernate假设连接表中有3列:父对象id(Sources class,list_id column), object id(Source class,source_id列)和map键的单独列。我打开其他问题,询问在Hibernate中通过id来映射对象的方法是什么。