请原谅我,因为我是新手休眠,其他类似问题的答案并没有解决这个问题(我相信我的问题很基本)。我想在我的持久化类中使用OneToMany和ManyToOne映射。 我有以下表格:
<button onclick="window.con = true; change();">click me</button>
<script>
window.con = false;
function change() {
while (window.con == true) {
var x = event.clientX;
var y = event.clientY;
// Put some logic here to break the loop.
}
//do some more magical stuff
}
</script>
我写的以下持久化类: 对于城市:
city (
id INT AUTO_INCREMENT,
name VARCHAR(255),
)
pincode (
id INT AUTO_INCREMENT,
pincode VARCHAR(6),
city_id INT FOREIGN KEY fk_city_id ON city(id)
)
area (
id INT AUTO_INCREMENT,
name VARCHAR(255),
pincode_id INT FOREIGN KEY fk_pincode_id ON pincode(id)
)
对于PinCode:
@Table(name="city")
@Entity
City {
@Id
private Integer id;
@Column(name="name")
private String name;
}
对于区域:
@Table(name="pincode")
@Entity
PinCode {
@Id
private Integer id;
@Column(name = "pincode")
private String pinCode;
@ManyToOne
@JoinColumn(name = "city_id")
private City city; //Multiple pincodes may be mapped to one city
//One pincode may have multiple areas
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pincode_mapping")
@Fetch(value = FetchMode.SELECT)
private List<Area> area;
}
面对以下异常:
@Entity
Area {
@Id
private Integer id;
@Column(name = "name")
private String name;
@ManyToOne(fetch = FetchType.EAGER, targetEntity = PinCode.class)
@Column(name = "pincode_id")
private PinCode pinCode; //Multiple areas may be mapped to one pincode
}
答案 0 :(得分:3)
您必须在“区域”实体的多对一注释中定义连接列:
@ManyToOne(fetch = FetchType.EAGER, targetEntity = PinCode.class)
@JoinColumn(name = "pincode_id", nullable = false)
另外,在你的Pincode实体中,你应该在mappedBy
属性中指出正确的字段:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pincode")
答案 1 :(得分:1)
问题是您使用mappedBy
错误:您在数据库中添加了列名称,但它必须是Area
实体中的PinCode
实体的属性名称:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pinCode")
@Fetch(value = FetchMode.SELECT)
private List<Area> area;
mappedBy
的JavaDoc告诉你同样的事情:
拥有该关系的字段。除非关系是单向的,否则是必需的。
答案 2 :(得分:1)
我想你的hibernate配置中有这样的东西
<mapping class="com.mycompany.model.PinCode" />
或者,如果您使用的是java配置
.addAnnotatedClass(PinCode.class);
确保将所有@Entity
类声明为映射类,或将其配置为自动扫描