简体   繁体   中英

Which data format is suitable to transfer data (result of left join db query) from servlet to JSP?

[using JPA, MySQL, MVC, Servlets, JSP] If I read some data from database LEFT JOIN -ing three tables (inside method of DAO object) how should I format that result, so i can set it as request attribute (in servlet) and forwards to JSP page?

Entities(tables in db):

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;
...

Entity 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;
...

So, I would like to make a method, probably inside PostDAO object that will look something like this:

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");
    ...
}

Method returns some fields from all three tables in database. Do I need to make separate class and store those data in objects of that class? Or JSON (although I haven't worked with it yet)?

What is the practice? What is easiest data format to use and forward from servlet to JSP, for some fields gotten as a result of joining couple tables?

It depends on your objective; to get the data to the browser, JSON and AJAX isn't a bad choice. To get the data to the JSP (from the Servlet), you'll probably want a Data Transfer Object (or possibly an immutable Value Object ).

数据传输对象

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM