2010-07-09 30 views
7

Giả sử tôi có lớp sau tên miền:Query tập hợp con của Cột với Gorm

class Book { 
    String title 
    String author 
    byte[] largeCoverArtImage 
} 

tôi có một cái nhìn danh sách mà tôi không cần phải hiển thị largeCoverArtImage, làm thế nào tôi có thể thực hiện các truy vấn SQL sau đây sử dụng Tiêu chuẩn GORM?

select title, author from Book 

Trả lời

7

Bạn có thể chạy các truy vấn HQL đó chọn cột cá nhân với executeQuery:

def titlesAndAuthors = Book.executeQuery('select title, author from Book') 

này sẽ trả về một Danh sách Object [], ví dụ

for (row in titlesAndAuthors) { 
    String title = row[0] 
    String author = row[1] 
    ... 
} 
+0

Không phải là câu trả lời tôi đã hy vọng, vì tôi không thể sử dụng mẫu phân trang tiêu chí chuẩn với executeQuery. Nhưng được đánh dấu là câu trả lời được chấp nhận (ví dụ: "Không"). Tôi sẽ chỉ ra rằng một giải pháp làm việc với Critiera, là tạo ra một khung nhìn db và lớp Domain riêng biệt (giả sử db kế thừa) cụ thể cho trang danh sách (do đó dễ dàng tận dụng mẫu phân trang tiêu chí). Tất nhiên, nhược điểm là sau đó bạn có hai lớp không tương thích đại diện cho bản chất cùng một tập hợp các bản ghi. –

7

Trong Grails (thử nghiệm với phiên bản 1.3.7), bạn có thể viết:

def titlesAndAuthors = Book.withCriteria { 
     projections { 
      property 'title', 'title' 
      property 'author', 'author' 
     } 
} 

Và bạn sẽ nhận được một danh sách các đối tượng [] như trên ví dụ.

+0

Thật tuyệt khi biết, chúng tôi đang chạy grails 1.3.2 ngay bây giờ, và trong chế độ bảo trì, nhưng nếu tôi có cơ hội nâng cấp và dùng thử, tôi sẽ quay lại và cho bạn biết cách nó hoạt động ra sao. –

+2

Flash về phía trước: Tôi đang sử dụng Grails 2.0.3 ngay bây giờ và điều này hoạt động tốt! –

+0

Có cách nào để lấy danh sách Object {} thay vì danh sách Object [] không? sử dụng "projections" phá vỡ api của tôi vì tôi dựa vào việc có danh sách các đối tượng. Nó lấy một danh sách Object []. Cám ơn vì sự gợi ý. – Calicoder

Các vấn đề liên quan