2016-04-18 12 views
0

私はOrdersのテーブルとorder.idを指すOrder Status Updatesのテーブルを持っています。私が注文のリストを取得する必要がありますが、私は最後のステータスがHibernate Criteria最新の状態とフィルタ結果に合流する

を「キャンセル」される受注
CREATE TABLE `orders` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`end_customer_id` bigint(20) NOT NULL, 
`created_at` datetime NOT NULL, 
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
KEY `FK_end_customer` (`end_customer_id`), 
CONSTRAINT `orders_ibfk_3` FOREIGN KEY (`end_customer_id`) REFERENCES `end_customers` (`id`) ON UPDATE CASCADE, 
) ENGINE=InnoDB AUTO_INCREMENT=100333 DEFAULT CHARSET=utf8; 


CREATE TABLE `order_status_updates` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `status` varchar(255) NOT NULL, 
    `date` datetime NOT NULL, 
    `order_id` bigint(20) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FK_order` (`order_id`), 
    CONSTRAINT `order_status_updates_ibfk_3` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
) ENGINE=InnoDB AUTO_INCREMENT=344180 DEFAULT CHARSET=utf8; 

現在の基準をしたくないので、私は注文状況の更新に参加する必要がある:

final Criteria c = criteria("o") 
    .add(eq("o.endCustomer.id", endCustomerId)); 
return list(c.addOrder(desc("createdAt"))); 

私は(日付でソート)最新の状態がMyOrderというクラスとORDER_STATUS列挙型と同様にidstatuscreatedAtフィールドを想定し

答えて

1

をキャンセルされた注文をフィルタリングする必要があります定義:

final Criteria c = sessionFactory.getCurrentSession().createCriteria(MyOrder.class); 

c.add(Restrictions.eq("id", yourId)) 
.add(Restrictions.ne("status", ORDER_STATUS.CANCELLED) 
.addOrder(Order.desc("createdAt")); 
+0

ステータスには該当しません。それは分離されたテーブルです... –

関連する問題