Я борюсь с моей структурой наследования, где у меня есть сопоставленный суперкласс, который содержит общее поле в конкретных классах. Этот суперкласс имеет сопоставление «один к одному» с объектом «обертка».Hibernate наследование сопоставление неизвестное свойство
Объекты выглядят так:
@Entity
public class Wrapper {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "wrapper_id", nullable = false)
private Long wrapperId;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "wrapper")
@Cascade(CascadeType.SAVE_UPDATE)
private Base base;
public Long getWrapperId() {
return wrapperId;
}
public void setWrapperId(Long wrapperId) {
this.wrapperId = wrapperId;
}
public Base getBase() {
return base;
}
public void setBase(Base base) {
this.base = base;
}
}
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Base {
@OneToOne(fetch = FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "wrapper_id")
protected Wrapper wrapper;
public Wrapper getWrapper() {
return wrapper;
}
public void setWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
}
}
@Entity
public class SubA extends Base {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "sub_a_id", nullable = false)
private Long subAId;
public Long getSubAId() {
return subAId;
}
public void setSubAId(Long subAId) {
this.subAId = subAId;
}
}
Для простоты я включил только один конкретный класс, но у меня есть несколько.
Это сопоставление отлично работает, когда у меня нет ссылки на «Base» в объекте-обертке. Как только я попытаюсь добавить двунаправленную связь между оболочкой и базой, я начинаю получать эту ошибку ... что не имеет смысла, поскольку поле есть.
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: com.xxx.Wrapper.base, referenced property unknown: com.xxx.Base.wrapper
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:153)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:453)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:438)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
... 50 more
Что мне не хватает? Спасибо,
Какую версию 'hibernate' вы используете? – Andremoniy
Мы используем 4.3.11.FINAL – gwnp