Java Hibernate:ManytoMany映射:“;“双向”;

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

我有两门课:

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 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()
。但是订单有多个房间,因此您应该真正重命名getter
getRooms()
。其余部分,请显示您的代码。我知道这对网站的其他用户不公平,但我的代码非常大,我不知道哪个部分有错误。我可以通过电子邮件或类似的方式发送给您吗?如果我们找到了解决方案,我会发布它。不。您应该能够识别相关的代码,或者编写一个小示例来重现这个问题莱姆。如果你有空的话,你能看一下我的代码吗?这对我来说非常重要。谢谢。)
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") })