我已经阅读了几个关于这个以及 API 的主题,我觉得我在正确的轨道上;但是,我必须仍然没有足够的理解来让它工作,因为..它不起作用!
我有以下 2 个表:TODO 和 JOBTYPE
TODO 表有 TDTDKEY (PK) 和 TDJTKEY(FK?) JOBTYPE 表有 JTJTKEY (PK) 和 JTCODE
如您所见,Todo.tdjtkey 对应于 jobtype.jtjtkey,我的目标是检索 jtcode 而不是密钥。
实体类部分看起来像这样:
Todo.java
@Id
@Basic(optional = false)
@Column(name = "TDTDKEY")
private String primaryKey;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "TDJTKEY", insertable = true, updatable = true)
private JobType jobType;
public Todo() {
}
public Todo(String primaryKey) {
this.primaryKey = primaryKey;
}
public String getPrimaryKey() {
return primaryKey;
}
public void setPrimaryKey(String primaryKey) {
this.primaryKey = primaryKey;
}
public JobType getJobType() {
return jobType;
}
public void setJobType(JobType jobType) {
this.jobType = jobType;
}
JobType.java
@Id
@Basic(optional = false)
@Column(name = "JTJTKEY")
private String primaryKey;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "jobType")
private Todo todo;
@Column(name = "JTCODE")
private String jobCode;
public JobType() {
}
public JobType(String primaryKey) {
this.primaryKey = primaryKey;
}
public String getPrimaryKey() {
return primaryKey;
}
public void setPrimaryKey(String primaryKey) {
this.primaryKey = primaryKey;
}
public String getJobCode() {
return jobCode;
}
public void setJobCode(String jobCode) {
this.jobCode = jobCode;
}
因此,当我对其进行命名查询时,Todo.findAll
它会给我 TDTDKEY(即 TD00000001)和相关的 TDJTKEY CODE(即 PICS PGM)。
现在,既然我终于让我的选择工作了,我正在尝试看看如何添加/编辑。
例如,如果我在 TD00000001 上并且我想将 PROG 更改为 SUPPORT。
如果我尝试它的正常方式sv.setJobType(txtJobType.getText());
不起作用并给我:
method setJobType in class entity.Todo cannot be applied to given types;
required: entity.JobType
found: java.lang.String
reason: actual argument java.lang.String cannot be converted to entity.JobType by method invocation conversion
所以这对我来说或多或少是可以理解的,但我对如何对 Todo 表执行更新一无所知?不知何故,我需要它在 JobType.java 中找到 SUPPORT,然后获取它的 JTJTKEY 并将其作为新的 TDJTKEY 放在 Todo.java 中?
任何帮助/提示表示赞赏!
编辑:以下代码按答案工作!谢谢!
String jpql = "select jobType from JobType jobType where jobType.jobCode = :code";
JobType otherJobType = WWEntityManager.entityManager.createQuery(jpql, JobType.class).setParameter("code", txtJobType.getText()).getSingleResult();
todoEntity.getJobType().removeTodo(todoEntity);
todoEntity.setJobType(otherJobType);
otherJobType.addTodo(todoEntity);
我的实体类现在看起来像这样
Todo.java
@ManyToOne
@JoinColumn(name = "TDJTKEY", insertable = true, updatable = true)
private JobType jobType;
JobType.java
@OneToMany(targetEntity=Todo.class, mappedBy="jobType")
private Collection jobTypes;
当然,我必须添加适当的删除和添加方法。