Использование статического вложенного класса в качестве типа поля хорошо и поддерживается. Но Hibernate не знает, как сопоставить такой сложный тип с типом столбца (именно об этом говорится в сообщении об ошибке).
Так что вам нужно либо создать пользовательский тип для обработки этого, либо аннотировать поле Results.BusinessDate
аннотацией @OneToOne
, чтобы сохранить его в другой таблице (я бы также удалил @Inheritance
, который бесполезен, но это не так проблема здесь).
Обновление: Просто для пояснения, использование пользовательского типа или сопоставление сложного типа с @OneToOne
действительно работает . Следующий код работает отлично (проверено):
@Entity
public class EntityWithStaticNestedClass implements Serializable {
@Id
@GeneratedValue
private Long id;
@OneToOne
private EntityWithStaticNestedClass.StaticNestedClass nested;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public EntityWithStaticNestedClass.StaticNestedClass getNested() {
return nested;
}
public void setNested(EntityWithStaticNestedClass.StaticNestedClass nested) {
this.nested = nested;
}
@Entity
public static class StaticNestedClass implements Serializable {
@Id
@GeneratedValue
private Long id;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
}
}
И обе сущности хорошо сохраняются в своих соответствующих таблицах. Но вы не показываете ни весь код, ни точную ошибку, поэтому я не могу сказать, почему это не для вас (возможно, вы пропустили @Id
и т. Д.).
При этом, если вы не хотите, чтобы businessDate
вообще сохранялся, аннотируйте его @Transient
(в JPA поля по умолчанию являются постоянными):
Обновление: Нельзя смешивать доступ к полям и свойствам. Так что вам нужно аннотировать getBusinessDate()
с @Transient
здесь. Извините, я не мог догадаться, что из показанного кода, и я думал, что это будет очевидно.