Рассмотрим следующий сценарий:
(Следующие вещи были опущены: конструкторы, методы получения и установки, аннотации @Column, аннотации @Basic, аннотации @Table, объявления импорта и пакета. Остальное ТОЛЬКО какЯ предполагаю, что это будет (даже пустые аннотации))
@Inheritance(strategy=InheritanceType.JOINED)
@Entity
public class A {
@Id @GeneratedValue
private long id;
private String aValue;//There are getters and setters for this, but I omitted them
}
@Entity
public class B extends A {
private String bValue;
}
//Missing @Inheritance here - JPA2 says "default" @Inheritance if it is missing
//But what does that mean?
@Entity
public class C extends A {
private String cValue;
}
@Entity
public class D extends C {
private String dValue;
}
//Missing strategy, whose default, according to the annotation interface, is SINGLE_TABLE
@Inheritance
@Entity
public class E extends C {
private String eValue;
}
@Entity
public class F extends E {
private String fValue;
}
@Entity
public class G extends E {
private String gValue;
}
Краткий обзор классов без синтаксиса:
A (@Inheritance(strategy=InheritanceType.JOINED)
B, C (no annotation)
D, E (@Inheritance)
F, G
Если вы должны следовать спецификации JPA, должно быть
- A: таблицы для A, B, C, D, E, F и G, все из которых содержат id + classValue
- B: таблицы для A, B, C, D и {EFG}, с A, B, C & D, содержащим id + classValue, и {EFG}, содержащим id + eValue + fValue + gValue + DTYPE
- C: таблицы для A, B и {CDEFG}, с Aи B содержит id + classValue и {CDEFG} содержит id + cValue + dValue + eValue + fValue + gValue + DTYPE
Или это какой-то другой сценарий, о котором я еще не думал?Я бы протестировал его, но я не уверен, будет ли это реализация JPA или сама спецификация, заполняющая пробелы: «Что происходит, когда аннотация @Inheritance не пропущена, но имеет неопределенную стратегию»?Лично я уверен, что C не произойдет, но я не знаю, будет ли он отображаться как A или B.
Отсюда и название вопроса: по умолчанию для @Inheritance установлено значение "SINGLE_TABLE" (независимо от того,он отсутствует или не определен), или он по умолчанию имеет значение «падение» (проверьте, как иерархия сущностей выше имеет дело с вещами) и, если это невозможно, «SINGLE_TABLE»?А что, если аннотация есть, но стратегия не определена?