簡體   English   中英

無法創建具有可嵌入ID的新實體

[英]Can't create new Entity with Embeddable ID

我有一個實體

@Entity
public class EcranChamp {

@EmbeddedId
@AttributeOverrides({ @AttributeOverride(name = "id_ecran", column = @Column(name = 
    "ecran", nullable = false)),
@AttributeOverride(name = "id_champ", column = @Column(name = "champ", nullable = false)) })
EcranChampId id ;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_ecran")
Ecran ecran;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_champ")
Champ champ; 
//getters & setters 

@Embeddable
public class EcranChampId implements Serializable {

 @Column(name = "id_champ", nullable = false) 
  private Long id_champ; 
  @Column(name = "id_ecran", nullable = false)  
  private Long id_ecran; 

當我嘗試添加新的EcranChamp

EcranChamp ec = new EcranChamp();
ec.setChamp(c);
ec.setEcran(e);

我有這個錯誤

org.hibernate.id.IdentifierGenerationException:為org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)上的com.kepler.portailclient.domain.model.EcranChamp類生成的null ID(AbstractSaveEventListener.java:107)〜[hibernate-core- 5.2.17.Final.jar:5.2.17.Final),位於org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67)〜[hibernate-core-5.2.17.Final.jar :5.2.17.Final]在org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189)〜[hibernate-core-5.2.17.Final.jar:5.2.17.Final]在org.hibernate .event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132)〜[hibernate-core-5.2.17.Final.jar:5.2.17.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener。 java:58)〜[hibernate-core-5.2.17.Final.jar:5.2.17.Final] at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:783) 〜[hibernate-core-5.2.17.Final.jar:5.2.17.Final] at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:768)〜[hibernate-core-5.2.17.Final.jar :5.2.17.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)〜[na:1.8.0_161] at sun.reflect.NativeMethodAccessorImpl.invoke(未知來源)〜[na:1.8.0_161]在sun處。 org.springframework.orm.jpa.ExtendedEntityManagerCreator $上的java.lang.reflect.Method.invoke(未知源)〜[na:1.8.0_161]的reflect.DelegatingMethodAccessorImpl.invoke(未知源)〜[na:1.8.0_161] ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350)〜[spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]在com.sun.proxy。$ Proxy453.persist(未知源)〜[na:na ]在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)〜[na:1.8.0_161]在sun.reflect.NativeMethodAccessorImpl.invoke(未知來源)〜[na:1.8.0_161]在sun.reflect.DelegatingMethodAccessorImpl.invoke(來源不明)〜[na:1.8.0_161],位於java.lang.reflect.Method.invoke(U 未知來源)〜[na:1.8.0_161],位於org.springframework.orm.jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:305)〜[spring-orm-5.0.8.RELEASE.jar:5.0.8。 RELEASE]在com.sun.proxy。$ Proxy453.persist(未知來源)〜[na:na]在org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:490)〜[spring- data.jpa-2.0.9.RELEASE.jar:2.0.9.RELEASE]在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)〜[na:1.8.0_161]在sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 〜[na:1.8.0_161]在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)〜[na:1.8.0_161]在java.lang.reflect.Method.invoke(未知源)〜[na:1.8.0_161]在org.springframework.data.repository.core.support.RepositoryComposition $ RepositoryFragments.invoke(RepositoryComposition.java:377)〜[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]在org。 springframework.data.repository.core.support.RepositoryCompositi on.invoke(RepositoryComposition.java:200)〜[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]在org.springframework.data.repository.core.support.RepositoryFactorySupport $ ImplementationMethodExecutionInterceptor.invoke (RepositoryFactorySupport.java:629)〜[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜[ spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]在org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:593)〜[spring-data-commons -2.0.9.RELEASE.jar:2.0.9.RELEASE],位於org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:578)〜[spring-data-commons-2.0。 9.RELEASE.jar:2.0.9.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜[spring-aop -5.0.8.RELEASE.jar:5.0.8.RELEASE],位於org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)〜[spring-data-commons-2.0.9.RELEASE.jar: 2.0.9.RELEASE]在org.springframework.org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]。 transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)〜[spring-tx-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java :98)〜[spring-tx-5.0.8.RELEASE.jar:5.0.8.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜[spring-aop-5.0。 8.RELEASE.jar:5.0.8.RELEASE],位於org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) 〜[spring-tx-5.0.8.RELEASE.jar:5.0.8.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜[spring-aop-5.0.8.RELEASE .jar:5.0.8.RELEASE]位於org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:135)〜[spring-data-jpa-2.0.9.RELEASE.jar: 2.0.9.RELEASE]在org.springframework.org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]。 aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)〜[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java :185)〜[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]在org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invo ke(SurroundingTransactionDetectorMethodInterceptor.java:61)〜[spring-data-commons-2.0.9.RELEASE.jar:2.0.9.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)〜 [org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)上的[spring-aop-5.0.8.RELEASE.jar:5.0.8.RELEASE]〜[spring-aop-5.0.8.RELEASE。 jar:5.0.8.RELEASE]在com.sun.proxy。$ Proxy457.save(未知來源)〜[na:na]在com.kepler.portailclient.domain.service.GestionEcranServiceImp.ajouterChampEcran(GestionEcranServiceImp.java:64) com.kepler.portailclient.interfaces.web.controller.administration.EcranController.ajouterChampEcran(EcranController.java:93)的〜[classes /:na]在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) )〜[na:1.8.0_161]位於sun.reflect.NativeMethodAccessorImpl.invoke(未知來源)〜[na:1.8.0_161]位於sun.reflect.DelegatingMethodAccessorImpl.invoke(未知來源)〜[na:1.8.0_161] java.lang.reflect中 .Method.invoke(未知來源)〜[na:1.8.0_161]

嘗試將Champ和Ecran放入可嵌入ID

@Embeddable
public class EcranChampId implements Serializable {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_champ")
    Champ champ; 

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_ecran")
    Ecran ecran;
    //getters & setters 
}


EcranChamp ec = new EcranChamp();
EcranChampId  id = new EcranChampId();
id.setChamp(c);
id.setEcran(e);
ec.setId(id);

而且您必須在Ecran和Champ中使用@Id @GeneratedValue(strategy = GenerationType.IDENTITY)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM