Позвольте мне быть более конкретным, было трудно описать это в заголовке.
У меня есть класс с именем Bucket, который отображает серию меток.Класс Bucket имеет атрибут id.У класса Label нет ссылки на Bucket, вместо этого у него есть поле bucketId, которое содержит идентификатор владельца.Это было необходимо, чтобы избежать циклических ссылок (Bucket to Label и back Label to Bucket), чтобы позволить объектам Bucket преобразовываться в нотацию JSON.
Мой класс Bucket выглядит следующим образом:
@Entity(name="Bucket")
@Table(name = "BUCKETS")
public class Bucket implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "BUCKET_ID")
protected long id;
/*
* Map of labels indexed by the label name. I'm not sure this mapping is correct!
*/
@ElementCollection
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@MapKeyColumn(name="LABEL_NAME")
private Map<String, Label> labels = new HashMap<String, Label>();
...
}
и класс Label выглядит следующим образом:
@Entity(name="Label")
@Table(name = "LABELS")
public class Label implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "LABEL_ID")
protected long id;
/*
* How do I map this? It should point to the id of the Bucket instance that has
* this label in its "labels" map
*/
protected long bucketId;
@Column(name = "LABEL_NAME", length=250, nullable=false)
private String name;
...
}
Если бы у меня могла быть ссылка Bucket в метке, я бы отобразил ее как @OneToMany, а затем в классе Buckets я отобразил бы как @ManyToOne (mappedBy = "bucket"), но у меня нет этой ссылки, только идентификатор, указывающий назад.
Кто-нибудь знает, как мне отобразить это?
Спасибо!Эдуардо