繁体   English   中英

如何使用JPA联接表列?

[英]How to join table columns with 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>

我不知道我在这里缺少什么...任何提示? 预先谢谢您!

在您的映射中,有些事情我不太了解,但请尝试以下操作

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM