#spring-boot #jpa #kotlin #repository
#весенняя загрузка #jpa #kotlin #репозиторий
Вопрос:
У меня проблема при попытке получить данные с помощью репозитория JPA,
каждый раз, когда я пытаюсь получить данные, всегда получаю ошибку java.lang.ClassCastException: shurl.model.Shurl не может быть приведен к java.io.Serializable,
я пытался исследовать решение, но до сих пор не нашел никаких подсказок для решения этой проблемы
2019-04-03 07:36:17.434 ERROR 19348 --- [nio-5001-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: shurl.model.Shurl cannot be cast to java.io.Serializable] with root cause
java.lang.ClassCastException: shurl.model.Shurl cannot be cast to java.io.Serializable
и вот мой код в репозитории jpa
package shurl.repository
import shurl.model.Shurl
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query
import org.springframework.stereotype.Repository
import org.springframework.data.domain.Pageable
import org.springframework.data.domain.Page
import java.time.LocalDate
import java.time.LocalDateTime
import shurl.model.ShurlHistory
@Repository
interface ShurlHistoryRepository : JpaRepository<ShurlHistory, String> {
@Query("select b.* from shurl a "
"left join shurl_history b on b.shurl_code = a.shurl_code "
"where a.shurl_code = :code",nativeQuery = true )
fun findShurlHistory(code:String):List<ShurlHistory>?
}
и вот моя модель
package shurl.model
import com.fasterxml.jackson.annotation.JsonIgnore
import javax.persistence.*
import org.apache.poi.hpsf.Decimal
import java.time.LocalDate
import java.sql.Blob
import org.hibernate.type.BlobType
import java.time.LocalDateTime
@Entity
@Table(name = "shurl_history", schema = "dbo")
data class ShurlHistory (
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = true)
var id:Long?=null,
@Column(name = "create_date", nullable = false )
var createDate:LocalDateTime = LocalDateTime.now(),
@ManyToOne
@JoinColumn(name = "shurl_code", referencedColumnName = "shurl_code", nullable = true)
var shurl : Shurl? = null
)
кто-нибудь может мне помочь?
Комментарии:
1. Прочитайте сообщение об ошибке: вашему
Shurl
классу необходимо реализоватьSerializable
.2. я думаю, что нашел решение без сериализации, я удаляю свойства идентификатора в классе shurl и устанавливаю shurl_code в качестве первичного ключа.. спасибо за ответ
Ответ №1:
Если вы ссылаетесь на другой объект, используя столбец, отличный от первичного ключа, сделайте объект, на который ссылается ссылка, сериализуемым.
Это известная ошибка, о которой сообщалось в 2012 году и которая до сих пор не решена.
Сделайте Shurl
serialzable, и он должен работать:
@Entity
public class Shurl implements Serializable {
private static final long serialVersionUID = 1L;
}
Ответ №2:
я думаю, что нашел решение без сериализации, я удаляю свойства идентификатора в классе shurl и устанавливаю shurl_code в качестве первичного ключа..