【发布时间】:2020-12-10 02:19:59
【问题描述】:
我是休眠新手,目前正在尝试使用实体类型为键和值进行映射。我在映射表中保留密钥(country_id)时遇到问题,因为它在列名下一直表示为null:mapkey_country_id,即使我明确使用@MapKeyJoinColumn 将列名指定为@987654325 @。
有关问题的更多上下文:
这是一个基本问题,我有一个带有Map<Country, Capital> 属性的Continent 实体。所以我写了以下代码:
大陆实体
@Entity
public class Continent {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long cont_id;
private String continent;
@OneToMany(mappedBy="cname")
@MapKeyJoinColumn(name ="country_id",nullable=false)
private Map<Country, Capital> countries;
// followed by setters and getters...
}
资本实体
@Entity
public class Capital {
private String capital;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long capital_id;
@ManyToOne
@JoinTable(name="cont_cap",
joinColumns= @JoinColumn(name="capital_id"),
inverseJoinColumns =@JoinColumn(name="cont_id")
)
private Continent cname;
@OneToOne
@JoinColumn(name="country_id")
private Country country;
// followed by setters and getters...
}
国家实体
@Entity
public class Country {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long country_id;
private String country;
// followed by setters and getters...
}
主要方法
public static void main(String[] args) {
SessionFactory sesfac = new AnnotationConfiguration().configure().buildSessionFactory();
Session session= sesfac.openSession();
Transaction tx = session.beginTransaction();
//country2
Country country2= new Country();
country2.setCountry("USA");
Capital cap2= new Capital();
cap2.setCapital("Washington, D.C.");
cap2.setCountry(country2);
Continent cont2= new Continent();
cont2.setCname("North America");
HashMap<Country, Capital> hm2 = new HashMap<Country, Capital>();
hm2.put(country2, cap2);
cont2.setCountries(hm2);
cap2.setCname(cont2);
session.save(country2);
session.save(cap2);
session.save(cont2);
tx.commit();
session.close();
}
【问题讨论】:
标签: hibernate hibernate-mapping