Spring Data JDBC:如何从RelationalPersistentProperty获取子聚合实体类类型?
从RelationalPersistentProperty获取子聚合类的方法
在Spring Data JDBC 2.7中,要从RelationalPersistentProperty拿到子聚合对应的类,可根据属性的类型(单对象/集合)选择对应的方法,同时可以先判断属性是否为子聚合类型来确保逻辑准确:
1. 先判断是否为子聚合属性
处理前可以先通过isAggregate()方法确认当前属性是否是子聚合类型,避免无效处理:
if (property.isAggregate()) { // 处理子聚合逻辑 }
2. 获取单对象类型的子聚合类
如果子聚合是单个对象(比如private Address shippingAddress;),直接调用getActualType()即可拿到对应的类:
RelationalPersistentProperty property = ...; Class<?> childAggregateClass = property.getActualType(); // 后续用于获取PersistentEntity RelationalPersistentEntity<?> childEntity = context.getRequiredPersistentEntity(childAggregateClass);
3. 获取集合类型的子聚合类
如果子聚合是集合形式(比如private List<OrderItem> items;),需要调用getComponentType()拿到集合的泛型元素类型——因为getActualType()返回的是集合本身的Class(比如List.class):
RelationalPersistentProperty property = ...; if (property.isCollectionLike() && property.isAggregate()) { Class<?> childAggregateClass = property.getComponentType(); RelationalPersistentEntity<?> childEntity = context.getRequiredPersistentEntity(childAggregateClass); }
补充说明:getActualType()会返回属性的实际运行类型,对非集合的子聚合属性直接生效;而集合类型的子聚合,必须通过getComponentType()获取泛型中的实体类,才能正确拿到子聚合的类型用于后续的context.getRequiredPersistentEntity()调用。
内容的提问来源于stack exchange,提问作者Khusayn
相关产品推荐
相关产品推荐

