我想在SAP HANA云平台上用Java创建一个简单的项目管理应用程序。用户可以向项目添加人员并定义从事项目的人员的工作时间。
我成功创建了一个小型应用程序逻辑。但是,我不清楚应该如何定义持久数据对象。以及如何以正确的方式存储和读取数据。
我创建了类"项目"和"人员"来添加数据(见下文)。
如何在它们之间创建关系并存储一个人在项目上花费的工作时间?
在ERM上,我知道解决方案:人员和项目之间的1:n关系以及它们之间带有"projectID","personID"和"workHours"的额外表。
到目前为止,该应用程序使用函数"addNewPerson"写入数据:
addNewPerson : function( sFirstName, sLastName, oTable ) {
var _this = this;
_this.odataServiceUrl = personsListOdataServiceUrl;
jQuery.ajax({
url : _this.odataServiceUrl + "/Person?$format=json",
type : 'POST',
contentType : 'application/json',
data : JSON.stringify({
firstName : sFirstName,
lastName : sLastName
}),
success : function(data) {
_this.getView().getModel().refresh();
oTable.unbindRows().bindRows("/Person");
},
error : function(jqXHR, textStatus, errorThrown) {
sap.ui.commons.MessageBox.alert("Failed to add person: " + textStatus+ "n" + errorThrown);
}
}); },
要读取数据,我只需将行绑定到对象即可。
那么,如何以正确的方式创建数据对象呢?如何读取数据并将其写入对象?
人.java:
package com.sap.netweaver.cloud.sample;
import javax.persistence.*;
@Entity
@Table(name = "T_PERSON")
@NamedQuery(name = "AllPersons", query = "select p from Person p")
public class Person {
@Id
@GeneratedValue
private long id;
@Basic
private String firstName;
@Basic
private String lastName;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void setFirstName(String param) {
this.firstName = param;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String param) {
this.lastName = param;
}
public String getLastName() {
return lastName;
}
}
项目.java:
package com.sap.netweaver.cloud.sample;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "T_PROJECT")
@NamedQuery(name = "AllProjects", query = "select p from Project p")
public class Project {
@Id
@GeneratedValue
private long id;
@Basic
private String projectName;
@Basic
private String projectDesc;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void setProjectName(String param) {
this.projectName = param;
}
public String getProjectName() {
return projectName;
}
public void setProjectDesc(String param) {
this.projectDesc = param;
}
public String getProjectDesc() {
return projectDesc;
}
}
首先是关于人与项目之间联系的问题。由于一个项目可以有多个人,我想你需要一个
@OneToMany(mappedBy = "projectEntity", cascade = CascadeType.PERSIST)
private List<Persons> persons= new ArrayList<Persons>();
在项目方面和人员方面
@JoinColumn(name = "projectEntity")// JPA creates join column for you with the project id - see wiki oneToMany JPA example
private Project project;
为了进行测试,我强烈评论以下步骤:
- 从 SAP HCP sdk 中的 JPA 示例开始:neo-java-web-sdk-2.36.4\samples\persistence-with-jpa
- 一旦你理解了这个例子(创建,persit,find),你添加1:N通过添加具有上述编码的第二个实体来关系。3).
- 如果这有效,我建议从本地Tomcat或Java EE服务器中设置的默认内存数据库转到真正的本地数据库。阿帕奇德比在那里为我工作得很好。您可以找到各种 youtube 视频,其中解释了德比的安装。