РЕДАКТИРОВАТЬ - Это решено: ProJPA2 заявляет, что некоторые поставщики персистентности реализуют стратегию JOINED без столбца дискриминатора. Спасибо тем, кто оставил ответы на мой вопрос.
У меня есть простая установка, в которой используется стратегия наследования JOINED, но я озадачен: почему, в отличие от того, что я читаю о стратегии соединения, в Интернете и в ProJPA2, в моем сгенерированном столбце нет дискриминатора DDL.
Интересно, есть такой вопрос на SO:
Почему EclipseLink добавляет столбец дискриминатора для стратегии объединенного наследования?
, который спрашивает, почему eclipselink добавляет столбец дискриминатора, когда (по мнению OP) это не нужно.
Мой небольшой тест работает нормально, данные сохраняются правильно, все работает, что, кажется, подтверждает точку зрения опрашивающего, и все же у меня нет столбца дискриминатора ни в одной из моих таблиц. У меня есть только FK для родительской таблицы (суперкласса) из каждой дочерней таблицы (подкласса).
Для простоты я использую eclipse, eclipselink 2.5.x, mysql, и это среда Java SE JPA. Где-то я использую hibernate, потому что я записываю кучу вещей hibernate, например
17:44:14 INFO [org.hibernate.Version].logVersion - HHH000412: Hibernate Core {5.2.17.Final}
но я не могу вспомнить, где находится этот параметр в проекте, и мне нужно уйти сейчас.
Все идеи приветствуются. Благодарю.
Фрагменты кода:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private int id;
private String name;
@Temporal(TemporalType.TIMESTAMP)
private Date date;
...
}
@Entity
public abstract class ShoppingOrder extends Order {
private String shopName;
...
}
@Entity
public class SuperMarketShoppingOrder extends ShoppingOrder {
private String supermarketName;
...
}
@Entity
public class EuroSuperMarketShoppingOrder extends SuperMarketShoppingOrder {
private String country;
...
}
Сгенерированный DDL:
CREATE TABLE `shoppingorder` (
`id` int(11) NOT NULL,
`date` datetime(6) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`shopName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `supermarketshoppingorder` (
`supermarketName` varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `FKg6ui4gndl8m9ouut2sb1g8xmm` FOREIGN KEY (`id`) REFERENCES `shoppingorder` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `eurosupermarketshoppingorder` (
`country` varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `FK2g6xgprpajjl3msv9rm00gi1f` FOREIGN KEY (`id`) REFERENCES `supermarketshoppingorder` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci