这是我的程序的最小示例数据库:
我尝试使用JPA注释将这些表映射到以下Java类(我对那些Gremlins我很新)
Project.java
@Entity
@Table(name = "projects")
public class Project {
@Id
String project_name;
@Column
String description;
@ ??
History history;
// methods
...
}
History.Java
@Entity
@Table(name = "histories")
public class History {
@Id
String history_id;
@ ??
Map<Date, String> sets; // represents the date/description pairs associated to the project
// methods
...
}
映射似乎是一个很难的挑战,这不是功课,我只是想知道这是不是很好的做法。我的类的布局是否需要与数据库结构相似? 理想情况下,我希望我的对象的逻辑与我的项目规范绑定,我也希望将对象的结构冻结为一个范例,也不会对数据库组织产生影响。
答案 0 :(得分:1)
首先,在java对象中,你应该坚持使用java命名约定。例如,project_name
DB列应映射到projectName
字段(使用@Column
注释)。其次,从DB图中可以100%清楚这两个表之间的关系是什么,但是从复数名称(histories
)来判断,我猜它是@OneToMany
。第三,历史实体中的地图(sets
)不能像这样完成,但它包含@OneToMany
关系。试试这样的事情
@Entity
@Table(name = "projects")
public class Project {
@Id
@Column(name = "project_name")
private String projectName;
private String description;
@OneToMany(mappedBy = "project")
private List<History> historyList;
// getters and setters
...
}
@Entity
@Table(name = "histories")
public class History {
@Id
@Column(name = "history_id")
private Integer historyId;
@Temporal(TemporalType.DATE) // or TemporalType.TIMESTAMP
private Date date;
private String description;
@ManyToOne
@JoinColumn(name = "project_name")
private Project project;
// getters and setters
...
}