2014-01-06 4 views
0

[используя JPA, MySQL, MVC, Servlets, JSP] Если я прочитал некоторые данные из базы данных LEFT JOIN -в трех таблицах (внутри метода объекта DAO), как мне отформатировать этот результат, поэтому я могу установить его как атрибут запроса (в сервлете) и переходите на страницу JSP?Какой формат данных подходит для передачи данных (результат запроса левого соединения db) из сервлета в JSP?

Объекты (таблицы в дБ):

Post:

@Entity 
@Table(name = "post") 
public class Post implements Serializable { 
    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "post_id", unique = true, nullable = false) 
    private Integer id; 

    @Column(name = "post_title", length=300, unique = false, nullable = false) 
    private String title; 

    @Column(name = "post_date", unique = false, nullable = false) 
    private Date date; 

    @Column(name = "post_summary", length=1000, unique = false, nullable = true) 
    private String summary; 

    @Column(name = "post_content", length=50000, unique = false, nullable = false) 
    private String content; 

    @Column(name = "post_visitors", unique = false, nullable = false) 
    private Integer visitors; 

    @ManyToOne 
    @JoinColumn (name = "user_id", referencedColumnName="user_id", nullable = false) 
    private User user; 

    @ManyToOne 
    @JoinColumn (name = "category_id", referencedColumnName="category_id", nullable = false) 
    private Category category; 

    @OneToMany(cascade = { ALL }, fetch = LAZY, mappedBy = "post") 
    private Set<Comment> comments = new HashSet<Comment>(); 
... 

Entity Comment:

@Entity 
@Table(name = "comment") 
public class Comment implements Serializable { 
    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "comment_id", unique = true, nullable = false) 
    private Integer id; 

    @Column(name = "comment_title", length=300, unique = false, nullable = false) 
    private String title; 

    @Column(name = "comment_date", unique = false, nullable = false) 
    private Date date; 

    @Column(name = "comment_content", length=600, unique = false, nullable = false) 
    private String content; 

    @ManyToOne 
    @JoinColumn (name = "user_id", referencedColumnName="user_id", nullable = false) 
    private User user; 

    @ManyToOne 
    @JoinColumn (name = "post_id", referencedColumnName="post_id", nullable = false) 
    private Post post; 
... 

Сущность User:

@Entity 
@Table(name = "user") 
public class User implements Serializable { 
    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "user_id", unique = true, nullable = false) 
    private Integer id; 

    @Column(name = "user_name", length=45, unique = false, nullable = false) 
    private String name; // "first_name" + ' ' + "last_name"  

    //URL address to user's image 
    @Column(name = "user_image", length=500, unique = false, nullable = true) 
    private String image; 

    @Column(name = "user_username", length=45, unique = false, nullable = false) 
    private String username; 

    @Column(name = "user_password", length=45, unique = false, nullable = false) 
    private String password; 
... 

Итак, я хотел бы сделать метод, вероятно, внутри PostDAO объекта, который будет выглядеть примерно так:

public <SomeDataTypeFormat???> getPostsSummaries(){ 

    Query q = em.createNativeQuery("SELECT 
     post_title, 
     post_summary, 
     post_date, 
     COUNT(comment_id) AS comment_cnt, 
     user.user_name 
    FROM 
     post 
     LEFT JOIN user USING(user_id) 
     LEFT JOIN comment USING(post_id) 
    GROUP BY 
     post_id 
    ORDER BY 
     comment_cnt DESC"); 
    ... 
} 

Метод возвращает некоторые поля из всех трех таблиц в базе данных. Нужно ли создавать отдельный класс и хранить эти данные в объектах этого класса? Или JSON (хотя я еще не работал с ним)?

Что такое практика? Какой простой формат данных использовать и пересылать из сервлета в JSP, для некоторых полей, полученных в результате соединения таблиц пары?

ответ

1

Это зависит от вашей цели; чтобы получить данные в браузере, JSON и AJAX - неплохой выбор. Чтобы получить данные в JSP (из сервлета), вам, вероятно, понадобится Data Transfer Object (или, возможно, неизменный Value Object).

Data Transfer Object

+0

Так, в принципе, я должен сделать отдельный класс, который будет иметь свойства, соответствующие полям в 'resultset' запроса? 'POJO', просто геттеры и сеттеры, верно? – Vladimir

+0

Если вы хотите «объект ценности», затем окончательные поля и просто геттеры. Если вы хотите DTO, тогда вы правы. –

+0

Вижу, спасибо за помощь. – Vladimir

Смежные вопросы