2015-03-29 2 views
2

У меня есть таблицы под названием Категория и категория.Заявление о присоединении на языке HQL

CREATE TABLE CATEGORY 
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    category_name VARCHAR(40) NOT NULL, 
    description VARCHAR(255), 
    uuid VARCHAR(40) 
); 

CREATE TABLE CATEGORY_SET 
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    parent INT NOT NULL, 
    child INT NOT NULL UNIQUE, 
    FOREIGN KEY (parent) REFERENCES CATEGORY (id), 
    FOREIGN KEY (child) REFERENCES CATEGORY (id) 
); 

Category.java

@Entity 
@Table(name = "CATEGORY") 
public class Category implements Serializable{ 
    @Id 
    @Column(name = "ID") 
    @GeneratedValue 
    private Integer id; 

    @Column(name = "CATEGORY_NAME", nullable = false, length = 40) 
    private String name; 

    @Column(name = "DESCRIPTION", nullable = false, length = 255) 
    private String description; 

    @Column(name = "UUID", nullable = false, length = 40) 
    private String uuid; 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "CATEGORY_SET", joinColumns = {@JoinColumn(name = "PARENT")}, inverseJoinColumns = {@JoinColumn(name = "CHILD")}) 
    private Collection<Category> subCategories = new LinkedHashSet<Category>(); 

    public Category(String name, String description, String uuid, Collection<Category> categorySets) { 
     this.name = name; 
     this.description = description; 
     this.uuid = uuid; 
     this.categorySets = categorySets; 
    } 
} 

Я хочу, чтобы все категории корневые а это значит, что они не ребенок категория любого.

SQL, чтобы получить результат является:

SELECT DISTINCT CATEGORY.id 
FROM CATEGORY 
    JOIN CATEGORY_SET 
    ON CATEGORY.id = CATEGORY_SET.parent 
WHERE CATEGORY.id NOT IN (SELECT child 
          FROM CATEGORY_SET); 

Может кто-то помочь мне написать HQL для этого.

+0

Я думаю, ваш запрос не будет возвращать корневые категории без детей –

+0

Это на самом деле ... –

+0

HQL работает на лиц, их полей и их объединений. Не на таблицах и столбцах. Так покажите нам свои сущности. –

ответ

1

Запрос HQL является:

select c 
from Category c 
where c.id not in (select child from CategorySet) 
+0

У меня есть одна-много ассоциация с таблицей CategorySet. Я обновил вопрос с сущностью. –

+0

Итак, «cc» будет Category снова, в котором не будет дочернего поля. Так оно терпит неудачу там. –

+0

В принципе мне нужна «категория», чей «идентификатор» отсутствует в «дочернем» столбце CategorySet. –