Java Hibernate:ManytoMany映射:“;“双向”;
我有两门课: Order.java:Java Hibernate:ManytoMany映射:“;“双向”;,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我有两门课: Order.java: @Entity @Table(name = "orders", catalog = "ownDB") public class Order { private int orderNO; private String oderName; private Set<Room> rooms = new HashSet<Room>(0); public Order(int orderNo, String or
@Entity
@Table(name = "orders", catalog = "ownDB")
public class Order {
private int orderNO;
private String oderName;
private Set<Room> rooms = new HashSet<Room>(0);
public Order(int orderNo, String orderName, Set<Room> rooms) {
this.oderNo = orderNo;
this.orderName = orderName;
this.rooms = rooms;
}
@Id
@Column(name = "orderNO", unique = true, nullable = false, length = 6)
public int getOrderNO() {
return this.orderNO;
}
public void setOrderNo(int OrderNO) {
this.orderNO = orderNO;
}
@Column(name = "orderName", nullable = false, length = 100)
public String getOrderName() {
return this.orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "rooms_orders", joinColumns = { @JoinColumn(name = "orderNO") }, inverseJoinColumns = { @JoinColumn(name = "roomNO") })
public Set<Room> getRoom() {
return this.rooms;
}
public void setRoom(Set<Room> rooms) {
this.rooms = rooms;
}
}
这两个映射有什么问题?这对我来说很有用。但我不想使用,如果这不是正确的方法。如果需要,请将Order类中的第二个映射更改为“@manytomy(mappedBy=“room”)”(不带joinTable注释)。我无法列出所有房间(及其订单),因为我收到以下错误消息:
未能延迟初始化角色集合:com.room.model.room.orders,无法初始化代理-无会话
列出所有订单及其房间和所有订单房间的正确方法是什么。所以我需要“双向”连接。您发布的代码中有很多错误 首先,联接表的定义不正确。它不应该有一个单独的ID列:没有人会填充此列。它应该被定义为
CREATE TABLE rooms_orders (
roomNO int(6) NOT NULL,
orderNO int (6) NOT NULL,
PRIMARY KEY (rommNO, orderNO));
其次,您的映射是错误的。双向关联总是有一个所有者端,它定义了关联的映射方式,还有一个反向端,它使用mappedBy属性告诉JPA这是反向端,以及在哪里找到所有者端。因此,在房间中,关联应该映射为
@ManyToMany(mappedBy = "rooms")
public Set<Order> getOrders() {
return this.orders;
}
表中没有“roomNumber”列。列名为“roomNO”。好的,我编辑了我的sql表,但不是“mappedBy=“room”是正确的方法吗?第三个错误仍然被编辑。但是roomNO在rooms\u orders表中仍然为零。
mappedBy=“room”
确实正确,因为您选择了方法的名称getRoom()
。但是订单有多个房间,因此您应该真正重命名gettergetRooms()
。其余部分,请显示您的代码。我知道这对网站的其他用户不公平,但我的代码非常大,我不知道哪个部分有错误。我可以通过电子邮件或类似的方式发送给您吗?如果我们找到了解决方案,我会发布它。不。您应该能够识别相关的代码,或者编写一个小示例来重现这个问题莱姆。如果你有空的话,你能看一下我的代码吗?这对我来说非常重要。谢谢。)
CREATE TABLE rooms_orders (
roomNO int(6) NOT NULL,
orderNO int (6) NOT NULL,
PRIMARY KEY (rommNO, orderNO));
@ManyToMany(mappedBy = "rooms")
public Set<Order> getOrders() {
return this.orders;
}
@JoinTable(name = "rooms_orders",
joinColumns = { @JoinColumn(name = "orderNO") },
inverseJoinColumns = { @JoinColumn(name = "roomNumber") })