2016-10-13 33 views
0

我有使用休眠的错误。 我的课:Hibernate在加入时返回false值

@Entity 
@Table(name = "cart") 
public class Cart { 
    @Id 
    @Column(name = "cart_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int cartId; 

    @Column(name = "user_id") 
    private int userId; 

    @Column(name = "product_id") 
    private int productId; 

    @Column(name = "quantity") 
    private int quantity; 

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "cart", cascade = CascadeType.ALL) 
    private Product product; 

我的第二类:

@Entity 
@Table(name = "products") 
public class Product{ 
    @Id 
    @Column(name = "product_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int productId; 

    @Column(name = "article") 
    private String article; 

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

    @Column(name = "price") 
    private BigDecimal price; 

    @Column(name = "description") 
    private String description; 

    @Column(name = "manufacturer") 
    private String manufacturer; 

    @Column(name = "category") 
    private String category; 

    @Column(name = "unitsinstock") 
    private long unitsInStock; 

    @OneToOne(fetch = FetchType.LAZY) 
    @PrimaryKeyJoinColumn 
    private Cart cart; 

当我执行此代码:

String hql = "SELECT c FROM Cart c JOIN c.product ORDER BY c.cartId ASC"; 
List<Cart> cart = session.createQuery(hql).list(); 

它返回其中的product_id等于cart_id

这种错误的价值观我在t之后看到了这个将我的数据库转移到新的pc(使用pg_dump的postgres 9.5)。

我认为这是恢复后的一些错误,但表结构是正确的。

车外键:"cart_pkey" FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE

产品指标:"products_pkey" PRIMARY KEY, btree (product_id)

产品主键:TABLE "cart" CONSTRAINT "cart_pkey" FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE

回答

0

你的HQL是我也不清楚,什么是你想回来,如果车为什么你连需要加入吗?

正确的HQL是

 String hql = "SELECT c.product FROM Cart c ORDER BY c.cartId ASC"; 
    List<product> cart = session.createQuery(hql).list(); 
这样

你已经具备参考产品车的对象,不需要别的

+0

我想例如返回所有关于id == N的用户的购物车的信息,要返回这个我需要关于产品(名称,价格,...)的所有信息来做到这一点,我使用内部连接=) –

+0

我编辑答案,是你是什么试图得到? –

+0

Nope)它与我的hql'SELECT c FROM Cart c JOIN c.product ORDER BY c.cartId ASC'工作正常。这在hql中不是问题。主要问题是数据库转储/恢复后**此查询返回产品ref **中cart_id == product_id的列表。例如我有cart_id:10,user_id:13,product_id:21,数量:23这样的记录。这应该返回购物车与此值和cart.product与product_id = 21和有关id = 21产品的数据,查询返回购物车正确(cart_id:10,user_id:12,product_id:21,数量:23),但cart.product返回id为10的产品以及第10个产品的所有数据。 –