, @Ioan Alexandru Cucu answer
, - sql - ,
, , , VersionedElement, ,
from
VersionedElement v
inner join fetch
v.versions
inner join fetch
v.currentVersion
where
v.id = :id
, VersionedElement. , VersionedElement data. , , , , .
@MappedSuperclass
public abstract class AbstractElement {
private String data;
public String getData() { return data; }
public void setData(String data) { this.data = data; }
}
JPA 1.0
. -, , - .
@MappedSuperclass, , . Element VersionedElement.
, Element
@Entity
public class Element extends AbstractElement {}
v.currentVersion, , AbstractElement, @Embedded, @ManyToOne?
@Embeddable
public class ElementAsEmbeddable extends AbstractElement {}
@Entity
public class VersionedElement {
private ElementAsEmbeddable currentElement;
private Set<Element> versions;
@Embedded
public ElementAsEmbeddable getCurrentVersion() { return currentVersion; }
public void setCurrentVersion(ElementAsEmbeddable currentVersion) { this.currentVersion = currentVersion; }
@OneToMany
public Set<Element> getVersions() { return versions; }
public void setVersions(Set<Element> versions) { this.versions = versions; }
}
from
VersionedElement v
inner join fetch
v.versions
where
v.id = :id
currentVersion , AbstractElement
versionedElement.setCurrentVersion((AbstractElement) element);