У меня есть две сущности: Box и Link.(Оба наследуются от _BaseClass, но я не думаю, что это уместно - хотя это может быть ....)
Таким образом, Box содержит link1, link2 и коллекцию ссылок.
_BaseEntity:
@MappedSuperclass
public class _BaseEntity implements Comparable<_BaseEntity> {
@Expose //
@Id //
@GeneratedValue() //
protected long id;
public _BaseEntity() {}
public long getID() {
if (id == 0) return creationId;
return id;
}
@Override public final int hashCode() {
return (int) getID();
}
@Override public final boolean equals(final Object pObj) {
if (pObj == null) return false;
if (getClass() != pObj.getClass()) return false;
final _BaseEntity other = (_BaseEntity) pObj;
return id == other.id;
}
@Override public int compareTo(final _BaseEntity arg0) {
return (int) (getID() - arg0.getID());
}
}
Поле:
@Entity
@Table(name = "PT_Box")
public class Box extends _BaseEntity {
@Expose private String name;
@Expose //
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "parent") //
private Link link1;
@Expose //
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "parent") //
private Link link2;
@Expose //
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "parent") //
private final ArrayList<Link> links = new ArrayList<>();
}
Ссылка:
@Entity
@Table(name = "PT_Link")
public class Link extends _BaseEntity {
@ManyToOne(fetch = FetchType.EAGER) //
@JoinColumn(name = "parent_id") //
private final Box parent; // dont expose for not looping!
@Expose private String name;
@Expose private String link;
@Expose private Date lastUpdate;
@Expose private Date nextUpdate;
}
Проблемы:
- Ссылки запутались.'link1' и 'link2' показывают первый элемент 'link'.
- И наоборот: если я установлю 'link1', то список 'links' покажет его как первый элемент.
Подозрение:
Я уверен, что это связано с сопоставлениями
- Box: @OneToMany (mappedBy = "parent")
- Ссылка: @ManyToOne @JoinColumn (name = "parent_id")
чтобы они также связывали эти ссылки с переменными 'link1' и 'link2'.
Вопрос:
Итак, мой вопрос: Как правильно управлять / аннотировать это?
- Отменить сопоставление 'link1' и 'link2'каким-то образом?
- Аннотировать' link1 'и' link2 'как @Transient, чтобы ссылки устанавливались только на стороне ссылки?(если это вообще работает ...)