如何实现域类

时间:2014-11-07 06:19:18

标签: java spring-mvc

我正在开发一个具有域类(用户,步骤,答案)的java-spring项目。请逐步解答问题的答案。每一步都有自己的文字和图像。一个答案可能是几个步骤。特定用户已回答了一个问题。回答每个单独存储在数据库中的内容,也可以编辑或从db中删除。这个例子的最佳实现,它怎么可能?

 public class Step{
   private int step_no;
   private String text;
   private byte[] image;

   //setter and getter
 } 
 public class Answer{
   private int id;
   private question_id;
   private String user;
   private List<Step> steps;

   //setter and getter
 }

1 个答案:

答案 0 :(得分:0)

您将需要使用对象关系映射工具,例如JPA,Hibernate,或者更合适的是Spring Data。这些工具允许您直接将表和列映射到实体和属性中。

ORM适用于java注释或xml配置。对于初学者,我建议你使用注释。

映射这些类的最佳方法是让用户保存他已完成的所有答案的列表,同时,答案将包含属于它的所有步骤的列表。让我向您展示一个如何完成它的快速示例。

用户:

@Entity
@Table(name = "<name in db>")
public class User {

    @Id
    private Integer userId;

    @Column(name = "<column name in db>")
    private String firstName;

    @Column(name = "<column name in db>")
    private String lastName;

    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Answer> answers;

    /* getters and setters */
}

答案:

@Entity
@Table(name = "<name in db>")
public class Answer {

    @Id
    private Integer answerId;

    @ManyToOne(fetch = FetchType.EAGER)
    private User user;

    @OneToMany(mappedBy = "answer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Step> steps;

    /* getters and setters */
}

步骤:

@Entity
@Table(name = "<name in db>")
public class Step {

    @Id
    private Integer stepId;

    @ManyToOne(fetch = FetchType.EAGER)
    private Answer answer;

    @Column(name = "<column name in db>")
    private Object image;

    @Column(name = "<column name in db>")
    private String text;

    /* getters and setters */
}

您始终可以使用简单的JDBC而不是强大的ORM工具来创建数据库查询,但绝对建议您查看javax.persistence。*包并从那里开始。