有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何用JPA连接表列?

我想发送一个产品列表作为对客户机的响应,并且我想加入从产品到产品列表的所有用户

我已经尝试了很多事情,但我无法工作

表如下所示:

表产品:

Product_id Product_Name
0          Shoe
1          Bike

表格用户:

Product_id User_Id User_Name
1          3       Jake
1          5       Tom
0          9       Bob

我想列出所有使用该产品的用户的产品:

Exp响应:

<products>
    <product>
        <productName>Shoe</productName>
        <productId>0</productId> 
        <users>
            <user>
                <userId>9</userId>
                <userName>Bob</userName>
            </user> 
        </user>
    </product>
    <product>
        <productName>Bike</productName>
        <productId>1</productId> 
        <users>
            <user>
                <userId>3</userId>
                <userName>Jake</userName>
            </user>
            <user>
                <userId>5</userId>
                <userName>Tom</userName>
            </user>
        </user>
    </product> 
</products>

产品:

@Entity
@Table(name = "Products") 
@NamedQueries ({
    @NamedQuery(name = "Product .selectAll", query = "SELECT p FROM Product p")     
})

public class Product {

    @Id
    @Column(name = "Product_id ")
    private Integer productId;

    @Column(name = "Product_name")
    private String productName;

    @OneToMany(mappedBy = "usedProductId", fetch=FetchType.EAGER)
      private List<User> users;

//...   
}

用户:

@Entity
    @Table(name = "Users") 
    @NamedQueries ({
        @NamedQuery(name = "User.selectAll", query = "SELECT u FROM User u")
})

public class User {

    @Column(name = "User_id")
    private Integer userId;

    @Column(name = "User_name")
    private String userName;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="Product_id")
    private Product usedProductId;

//...   
}

从代码中我得到了产品列表,但没有用户列表。。。答复如下:

<products>
    <product>
        <productName>Shoe</productName>
        <productId>0</productId> 
    </product>
    <product>
        <productName>Bike</productName>
        <productId>1</productId> 
    </product> 
</products>

我不知道我在这里错过了什么。。。有什么建议吗? 提前谢谢你


共 (1) 个答案

  1. # 1 楼答案

    在您的映射中,有一些我不太理解的事情,但是请尝试以下事情

    User

    除去

    @Id
    @Column(name = "Product_id")
    private Integer productId;
    

    如果不是为了什么特殊目的,我不知道你为什么要把它放在那里

    改变

    // @Column(name = "User_id")
    @Id(name = "User_id")
    private Integer userId;
    

    然后再试一次

    为了让代码更清晰,您可能还需要更改

    Product

    // @OneToMany(mappedBy = "usedProductId", fetch=FetchType.EAGER)
    @OneToMany(mappedBy = "product", fetch=FetchType.EAGER)
    private List<User> users;
    

    User

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="Product_id")
    private Product product;