编辑-已解决:ProJPA2指出,某些持久性提供程序实现了JOINED策略,而没有区分符列。谢谢那些留下我问题答案的人。
我有一个使用JOINED继承策略的简单设置,但是为什么我与在线和ProJPA2中关于联合策略的读物相反,为什么我生成的内容中没有歧视项,我对此感到困惑DDL。
有趣的是,关于SO的问题是: Cloud Build image.
询问,为什么eclipselink在(根据OP的意见)没有必要时添加一个鉴别符列。 我的小型测试工作正常,数据可以正确持久保存,一切正常,这似乎证明了发问者的观点,但是,我的任何表中都没有歧视项列。从每个子表(子类)到父表(父类)都只有FK。
为了简单起见,我正在使用eclipse,eclipselink 2.5.x,mysql,它是Java SE JPA环境。我正在使用休眠模式的某个地方,因为我正在记录大量的休眠模式,例如
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
答案 0 :(得分:0)
您的映射不正确。
您有
@MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
MappedSuperclass用于在子类中包含超类的所有字段,而Inheritance是“真实”继承映射。
所以您应该删除@MappedSuperclass。
但这不是你的问题。
您是否创建了在超类级别和子类级别上查询的查询?
这也可以吗?
我可以假设它不起作用。
EclipseLink使用discriminator列来区分子类是哪种类型。 Hibernate对case语句也是如此。
请告诉我查询是否有效。谢谢。
答案 1 :(得分:0)