I need association @OneToMany
from Country to superclass Place
(@MappedSuperclass
). It could be bidirectional. I would need something like @OneToAny
.
@MappedSuperclass
public class Place {
private String name;
private Country country;
@Column
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne
@JoinColumn(name="country_id")
public Country getCountry() {
return country;
}
public void setCountry(Country country) {
this.country = country;
}
}
Country:
@Entity
public class Country {
private long id;
private String name;
private List<Place> places;
@Any(metaColumn = @Column(name = "place_type"), fetch = FetchType.EAGER)
@AnyMetaDef(idType = "integer", metaType = "string", metaValues = {
@MetaValue(value = "C", targetEntity = City.class),
@MetaValue(value = "R", targetEntity = Region.class) })
@Cascade({ org.hibernate.annotations.CascadeType.ALL })
//@JoinColumn(name="unnecessary")
//@OneToMany(mappedBy="country") // if this, NullPointerException...
public List<Place> getPlaces() {
return places;
}
//and rest of class
Without @JoinColunm
there is an exception:
Caused by: org.hibernate.AnnotationException: @Any requires an explicit @JoinColumn(s): tour.spring.bc.model.vo.Country.places
In table City and Region is foreign key to table Country (Region.country_id, City.country_id) which is ok.
But I do NOT need foreign key in table Country to tables Region and City so I don't need @JoinColum
.
What can I do?
@MappedSuperclass
, each of the concrete subclasses ofPlace
can have its own ID generator, whereas with@Inheritance(InheritanceType.TABLE_PER_CLASS)
, they all have to have the same. For example, instances of two different subtypes ofPlace
can in the former case have the same ID number, but in the latter case they can't. – Sandlin