有建模为三个实体三个表:JPA 3路连接注释
@Entity
@Table(name="event")
public class Event {
public Long datetime;
public String name;
public Long processId;
}
@Entity
@Table(name="process")
public class Process {
public Long Id;
public Long sequence;
public Name name;
}
@Entity
@Table(name="operation")
public class Operation {
public Long Id;
public Long datetime;
public Long sequence;
}
流程操作序列的任何独特的单记录由具有3路连接限制的SQL获得:
SELECT *
FROM event e, process p, operation q
WHERE e.processId = p.id
AND e.datetime = q.datetime
AND p.sequence = q.sequence
为了实现在JPA,我必须做出操作的列表, 这将是明确的范围缩小到救援人员到场的JQPL平等p.sequence一个记录= q.sequence
@Entity
@Table(name="event")
public class Event {
public Long datetime;
public String name;
public Long processId;
@OneToOne
@JoinColumn(
name = "processId", referencedColumnName="id",
insertable=false, updatable=false)
private Process process;
@OneToMany
@JoinColumn(
name = "datetime", referencedColumnName="datetime",
insertable=false, updatable=false)
private List<Operation> operations;
}
凡JPQL指定传递第三个加入约束:
SELECT e FROM Event e
INNER JOIN FETCH e.process p
INNER JOIN FETCH e.operations q
WHERE p.sequence = q.sequence
不过,我想所有的三个约束的实体POJO内进行建模。难道不应该有办法单独使用JPA注释来进行三向连接吗?如下面的实体的伪代码说明:在JPQL
SELECT e FROM Event e
INNER JOIN FETCH e.process p
INNER JOIN FETCH e.operations q
@Entity
@Table(name="event")
public class Event {
public Long datetime;
public String name;
public Long processId;
@OneToOne
@JoinColumn(
name = "processId", referencedColumnName="id",
insertable=false, updatable=false)
private Process process;
@OneToOne
@JoinColumn(
name = "datetime", referencedColumnName="datetime",
insertable=false, updatable=false)
@JoinColumn(
name = "process.sequence", referencedColumnName="sequence",
insertable=false, updatable=false)
private Operation operations;
}
因此,它没有必要指定传递联接约束如何使用JPA注释连接模型的传递?
BTW,我已经离开了JAXB注释。事件必须绝对是XML根标签。因此,使用事件POJO对实体进行建模。 Event实体直接用作XML DTO和JAXB。也就是说,你不应该建议我使用另一个POJO作为根。 –
我不是100%确定你的问题是什么......如果你指定了连接的ON子句,它不能解决你的问题吗? – slambeth