@Entity
interface GenModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long
val name: String
@OneToMany(mappedBy = "model")
val entities: List<GenEntity>
}
@Entity
interface GenEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long
@ManyToOne
@OnDissociate(DissociateAction.DELETE)
val model: GenModel
/**
* 上级实体
*/
@ManyToMany
@JoinTable(
name = "gen_super_entity_mapping",
joinColumnName = "inherit_entity_id",
inverseJoinColumnName = "super_entity_id"
)
val superEntities: List<GenEntity>
/**
* 上级实体 ID 视图
*/
@IdView("superEntities")
val superEntityIds: List<Long>
/**
* 继承实体
*/
@ManyToMany(mappedBy = "superEntities")
val inheritEntities: List<GenEntity>
/**
* 继承实体 ID 视图
*/
@IdView("inheritEntities")
val inheritEntityIds: List<Long>
val name: String
}
表结构
CREATE TABLE `gen_model`
(
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `gen_entity`
(
`id` bigint NOT NULL AUTO_INCREMENT,
`model_id` bigint NOT NULL,
`name` varchar(500) NOT NULL,
CONSTRAINT `fk_entity_model` FOREIGN KEY (`model_id`) REFERENCES `gen_model` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
PRIMARY KEY (`id`)
);
CREATE TABLE `gen_super_entity_mapping`
(
`super_entity_id` bigint NOT NULL,
`inherit_entity_id` bigint NOT NULL,
PRIMARY KEY (`super_entity_id`, `inherit_entity_id`),
CONSTRAINT `fk_super_entity_mapping_super_entity` FOREIGN KEY (`super_entity_id`) REFERENCES `gen_entity` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_super_entity_mapping_inherit_entity` FOREIGN KEY (`inherit_entity_id`) REFERENCES `gen_entity` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
);
抛出异常
val model1 = sqlClient.insert(GenModel {
name = "model1"
}).modifiedEntity
val superEntity = sqlClient.insert(GenEntity {
name = "superEntity"
model = toIdOnly(model1)
}).modifiedEntity
sqlClient.insert(GenEntity {
name = "inheritEntity"
model = toIdOnly(model1)
superEntityIds = listOf(superEntity.id)
})
sqlClient.deleteByIds(GenModel::class, listOf(model1.id))
java.lang.IllegalArgumentException: The back property "top.potmot.entity.GenEntity.superEntities" is not association property with column defined or middle table
at org.babyfish.jimmer.sql.ast.impl.mutation.DeleteContext.<init>(DeleteContext.java:66)
at org.babyfish.jimmer.sql.ast.impl.mutation.DeleteContext.backPropOf(DeleteContext.java:96)
at org.babyfish.jimmer.sql.ast.impl.mutation.MiddleTableOperator.backPropOf(MiddleTableOperator.java:68)
at org.babyfish.jimmer.sql.ast.impl.mutation.ChildTableOperator.lambda$middleTableOperators$3(ChildTableOperator.java:538)
at org.babyfish.jimmer.sql.ast.impl.mutation.AbstractOperator.createMiddleTableOperators(AbstractOperator.java:145)
at org.babyfish.jimmer.sql.ast.impl.mutation.ChildTableOperator.middleTableOperators(ChildTableOperator.java:533)
at org.babyfish.jimmer.sql.ast.impl.mutation.ChildTableOperator.disconnect(ChildTableOperator.java:179)
at org.babyfish.jimmer.sql.ast.impl.mutation.ChildTableOperator.disconnect(ChildTableOperator.java:102)
at org.babyfish.jimmer.sql.ast.impl.mutation.Deleter.execute(Deleter.java:152)
at org.babyfish.jimmer.sql.ast.impl.mutation.DeleteCommandImpl.executeImpl(DeleteCommandImpl.java:53)
at org.babyfish.jimmer.spring.cfg.support.SpringConnectionManager.execute(SpringConnectionManager.java:31)
at org.babyfish.jimmer.sql.ast.impl.mutation.DeleteCommandImpl.execute(DeleteCommandImpl.java:38)
at org.babyfish.jimmer.sql.ast.impl.mutation.DeleteCommandImpl.execute(DeleteCommandImpl.java:17)
at org.babyfish.jimmer.sql.kt.impl.KEntitiesImpl.deleteAll(KEntitiesImpl.kt:273)
at org.babyfish.jimmer.sql.kt.KEntities.deleteAll$default(KEntities.kt:113)
at org.babyfish.jimmer.sql.kt.KSqlClient.deleteByIds(KSqlClient.kt:230)
at org.babyfish.jimmer.sql.kt.KSqlClient.deleteByIds$default(KSqlClient.kt:229)
at top.potmot.service.ModelService.delete$lambda$15(ModelService.kt:138)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at top.potmot.service.ModelService.delete(ModelService.kt:137)
环境
实体结构
表结构
抛出异常
复现
jimmer-simple-kotlin-k2.zip