Spring 未与父ID映射的多工单

Spring 未与父ID映射的多工单,spring,hibernate,jpa,spring-boot,Spring,Hibernate,Jpa,Spring Boot,我正在尝试在我的spring boot应用程序中实现测试,但我在许多One/OneToMany链接方面遇到了问题 似乎没有创建子对象的链接,而我使用CascadeType=ALL 我尝试在BusinesDomain.addSubdomain中创建它,添加“subDomain.domain(this);”,但这会导致循环 我发现其他话题也有同样的错误,但似乎没有一个涵盖了我的问题 你能帮我找出问题所在吗 非常感谢 这里是我的实体 import lombok.AccessLevel; import

我正在尝试在我的spring boot应用程序中实现测试,但我在许多One/OneToMany链接方面遇到了问题

似乎没有创建子对象的链接,而我使用CascadeType=ALL

我尝试在BusinesDomain.addSubdomain中创建它,添加“subDomain.domain(this);”,但这会导致循环

我发现其他话题也有同样的错误,但似乎没有一个涵盖了我的问题

你能帮我找出问题所在吗

非常感谢

这里是我的实体

import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.Setter;
import lombok.experimental.Accessors;

@Accessors(fluent = true)
@Data
@Entity
@NoArgsConstructor
public class BusinessDomain {
    @Setter(AccessLevel.NONE)
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @NonNull
    @Column(unique=true)
    private String name;

    @OneToMany(mappedBy = "domain", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<BusinessSubDomain> subDomains = new LinkedHashSet<>();

    public void addSubDomain(BusinessSubDomain subDomain) {
        subDomains.add(subDomain);
    }
}

@Accessors(fluent = true)
@Data
@Entity
@NoArgsConstructor
public class BusinessSubDomain {
    @Setter(AccessLevel.NONE)
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "business_domain_id", referencedColumnName="id")
    private BusinessDomain domain;
}
通过此操作,我得到了错误消息:

[主要]信息 com.myproject.project.test.model.soadatamodel.business.domaining.BusinessDomainTest -在24.161秒内启动BusinessDomainTest(JVM运行时间为26.159)[main]INFO org.springframework.test.context.transaction.TransactionContext- 已开始测试上下文的事务(1)[DefaultTestContext@76480730 testClass=BusinessDomainTest,testInstance= com.myproject.project.test.model.soadatamodel.business.domaining。BusinessDomainTest@405a296e, testMethod=createBusinessDomainWithArea@BusinessDomainTest, testException=[null],mergedContextConfiguration= [WebMergedContextConfiguration@5f5c2451测试类= BusinessDomainTest,位置='{}',类='{class com.myproject.project.TestApplication}',ContextInitializerClass= “[]”,activeProfiles=“{}”,propertySourceLocations=“{}”, 财产来源财产= “{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}”, 上下文定制器= 设置[org.springframework.boot.test.context]。SpringBootTestContextCustomizer@6eceb130, org.springframework.boot.test.context.filter。ExcludeFilterContextCustomizer@47db50c5, org.springframework.boot.test.mock.mockito。MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.properties。PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@68ceda24], resourceBasePath='src/main/webapp',contextLoader= 'org.springframework.boot.test.context.SpringBootContextLoader', 父项=[null]]];事务管理器 [org.springframework.orm.jpa。JpaTransactionManager@28d97205]; 回降 [true][main]信息 org.hibernate.hql.internal.QueryTranslatorFactoryInitiator- HH000397:使用ASTQueryTranslatorFactory休眠:选择 businessdo0.id为id1\u 1\u,businessdo0.description为descrippt2\u 1\u, businessdo0。名称为name3\u 1\u来自BusinessDomain businessdo0\u其中 businessdo0_u0.name=?Hibernate:调用Hibernate\u序列的下一个值 Hibernate:调用Hibernate_序列[main]警告的下一个值 org.hibernate.engine.jdbc.spi.SqlExceptionHelper-SQL错误:23502, SQLState:23502[main]错误 org.hibernate.engine.jdbc.spi.SqlExceptionHelper-不允许为NULL 对于“业务\域\ ID”列;SQL语句:插入到 BusinessSubDomain(描述、业务域id、名称、id)值 (?,?,?,?)[23502-168][main]信息 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl- HH000010:批处理发布时,它仍然包含JDBC语句 org.springframework.dao.DataIntegrityViolationException:无法 执行语句;SQL[n/a];约束[null];嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法 在处执行语句 org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:278) 在 org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateException如果可能(HibernateJpaDialect.java:244) 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.TranslateException如果可能(AbstractEntityManagerFactoryBean.java:488) 在 org.springframework.dao.support.ChainedPersistenceExceptionTranslator.TranslateException如果可能(ChainedPersistenceExceptionTranslator.java:59) 在 org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) 位于com.sun.proxy.$Proxy134.findByName(未知源) com.myproject.project.service.soadatamodel.business.domaining.impl.BusinessDomainServiceImpl.findByName(BusinessDomainServiceImpl.java:40) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:483) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 在 org.springframework.aop.framew
@Override
public BusinessDomain saveOrUpdate(BusinessDomain businessDomain) throws OrcaException {
    try {
        BusinessDomain domain = businessDomainRepository.findByName(businessDomain.name());
        if(null == domain) {
        // Repository class not overriden (extends CrudRepository<BusinessDomain, Long>)
            return businessDomainRepository.save(businessDomain);
        } else {
            domain.description(businessDomain.description());
            domain.subDomains(businessDomain.subDomains());
            return businessDomainRepository.save(domain);
        }
    } catch (Exception e) {
        throw new OrcaException(e);
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class BusinessDomainTest {
    @Test
    @Transactional
    public void createBusinessDomainWithSubDomain() throws OrcaException {
        BusinessDomain passengerBusinessDomain = new BusinessDomain().name(DOMAIN_NAME).description(DOMAIN_DESCRIPTION);
        BusinessSubDomain distributionBusinessSubDomain = new BusinessSubDomain().name(SUBDOMAIN_NAME)
                .description(SUBDOMAIN_DESCRIPTION);
        passengerBusinessDomain.addSubDomain(distributionBusinessSubDomain);
        businessDomainService.saveOrUpdate(passengerBusinessDomain);
        BusinessDomain domain = businessDomainService.findByName(DOMAIN_NAME);
    }
}
public void addSubDomain(BusinessSubDomain subDomain) {
    subDomains.add(subDomain);
    subDomain.domain(this);
}