【问题标题】:How to join table columns with JPA?如何使用 JPA 连接表列?
【发布时间】:2017-11-24 08:56:44
【问题描述】:

我想向客户发送一个产品列表作为响应,我想将产品中的所有用户加入到产品列表中。

我尝试了很多东西,但我无法开始工作......

表格如下:

餐桌产品:

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>

我不知道我在这里缺少什么...任何提示? 提前谢谢你!

【问题讨论】:

  • 来自那个代码:哪个代码?我们只有两个实体和一个 XML。但我们一开始不知道这个 XML 是如何生成的。
  • 您的用户映射有点奇怪。 @Id 是在 productId 上设置的,并且该变量是重复的,这最终会导致编译错误。
  • @MaciejKowalski 我更新了它
  • 加入?加入哪里?在查询中?我们必须猜你的意思吗?
  • @DN1 已更新

标签: java jpa one-to-many many-to-one


【解决方案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;

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 2017-11-08
    • 2011-12-20
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多