我在 Kotlin 项目中使用 Spring Boot 3.2.2 并尝试在实体类中使用 Embedded 对象
import org.springframework.data.repository.kotlin.CoroutineCrudRepository
import java.io.Serializable
import javax.persistence.Embeddable
import javax.persistence.Embedded
import javax.persistence.Entity
import javax.persistence.Id
@Entity
class TestEntity(
@Id
val id: Long,
@Embedded
val emb: Emb
)
@Embeddable
class Emb(
val field: String
)
interface TestEntityRepository : CoroutineCrudRepository<TestEntity, Long>
所以,我的项目中使用了kotlin JPA和spring插件:
kotlin("plugin.jpa") version "1.9.21"
id("io.spring.dependency-management") version "1.1.0"
id("org.springframework.boot") version "3.2.2"
当我尝试使用
TestEntityRepository
存储库保存实体时:
testEntityRepository.save(TestEntity(1L, Emb("asd")))
我遇到以下异常:
3:37:20.336 [main] ERROR o.s.c.e.ApplicationListenerMethodAdapter - Unexpected error occurred in asynchronous listener
org.springframework.dao.InvalidDataAccessApiUsageException: Nested entities are not supported
at org.springframework.data.r2dbc.convert.MappingR2dbcConverter.writePropertyInternal(MappingR2dbcConverter.java:251)
at org.springframework.data.r2dbc.convert.MappingR2dbcConverter.writeProperties(MappingR2dbcConverter.java:218)
at org.springframework.data.r2dbc.convert.MappingR2dbcConverter.writeInternal(MappingR2dbcConverter.java:189)
at org.springframework.data.r2dbc.convert.MappingR2dbcConverter.write(MappingR2dbcConverter.java:181)
at org.springframework.data.r2dbc.convert.MappingR2dbcConverter.write(MappingR2dbcConverter.java:61)
at org.springframework.data.r2dbc.core.DefaultReactiveDataAccessStrategy.getOutboundRow(DefaultReactiveDataAccessStrategy.java:177)
...
似乎嵌入应该有效,为什么在这种特殊情况下它不起作用?