2016-10-13 5 views
0

hibernateを使用してエラーが発生しました。 私のクラス: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

いいえ)それは私のhql 'と一緒にうまく働いたカートからcジョインc.productオーダーby c.cartId ASC'を選択します。これはhqlでは問題ではありません。主な問題は、データベースのダンプ/リストア後**このクエリはproduct ref **のcart_id == product_idのリストを返します。例えばcart_id:10、user_id:13、product_id:21、quantity:23のようなレコードがあります。これはこの値でカートを返し、product_id = 21のcart.productとid = 21の商品に関するデータを返します。 (cart_id:10、user_id:12、product_id:21、quantity:23)が、cart.productはid 10の商品と10番目の製品のすべてのデータを返します。 –

関連する問題