JPA 3-way rejoindre annotation

Il y a trois tables modélisé en trois entités:

@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;
}

Toute seule et unique enregistrement de l'opération-séquence est obtenue par le code SQL qui a un 3-way contrainte de jointure:

SELECT *
FROM event e, process p, operation q 
WHERE e.processId = p.id
  AND e.datetime = q.datetime
  AND p.sequence = q.sequence

À mettre en œuvre que dans la JPA, je dois faire une liste des opérations,
ce qui serait explicitement restreint à un seul enregistrement thro la JQPL l'égalité p.séquence = q.séquence

@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;
}

Où la JPQL spécifie le transitive 3ème contrainte de jointure:

SELECT e FROM Event e
INNER JOIN FETCH e.process p
INNER JOIN FETCH e.operations q
WHERE p.sequence = q.sequence

Cependant, je veux que tous les trois contraintes à être modélisé à l'intérieur de l'entité POJO. Ne devrait-il pas être de manière à utiliser les annotations JPA seul à trois voies de la rejoindre? Comme l'entité suivante pseudo-code de l'illustre:

@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;
}

De sorte qu'il ne serait pas nécessaire de spécifier transitif-contrainte de jointure dans la JPQL

SELECT e FROM Event e
INNER JOIN FETCH e.process p
INNER JOIN FETCH e.operations q

Comment modéliser un transitives le rejoindre à l'aide des annotations JPA?

BTW, j'ai laissé de côté les annotations JAXB. L'événement doit absolument être le XML tag racine.Par conséquent, l'entité modélisée à l'aide de l'Événement POJO. L'Événement entité est utilisée directement comme XML DTO thro JAXB. C'est-à-dire, vous ne devez pas suggérer que j'utilise un autre POJO comme la racine.
Je ne suis pas sûr à 100% sur ce que votre question est... si vous spécifiez la clause de la joint-t-elle pas à résoudre votre problème?

OriginalL'auteur Blessed Geek | 2012-10-02