Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.hibernate.PersistentObjectException:分离的实体传递给persist:com.demo.assistlane.domain.FaqArticle,位于org.hibernate.event.intern 当我点击DeleteAPI时,它给出异常。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。_Hibernate_Spring Data_Hibernate Mapping - Fatal编程技术网

org.hibernate.PersistentObjectException:分离的实体传递给persist:com.demo.assistlane.domain.FaqArticle,位于org.hibernate.event.intern 当我点击DeleteAPI时,它给出异常。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

org.hibernate.PersistentObjectException:分离的实体传递给persist:com.demo.assistlane.domain.FaqArticle,位于org.hibernate.event.intern 当我点击DeleteAPI时,它给出异常。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。,hibernate,spring-data,hibernate-mapping,Hibernate,Spring Data,Hibernate Mapping,FaqCategory.java @Data @Entity @EqualsAndHashCode(callSuper = false) @EntityListeners({ AbstractEntityListener.class }) @Audited public class FaqCategory extends AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) privat

FaqCategory.java

@Data
@Entity
@EqualsAndHashCode(callSuper = false)
@EntityListeners({ AbstractEntityListener.class })
@Audited
public class FaqCategory extends AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "display_name")
    private String displayName;

    private String summary;

    @OneToMany(mappedBy = "faqCategory", cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, orphanRemoval = true)
    private Set<FaqArticle> faqArticle = new HashSet<FaqArticle>();
}
DtoDomainConversationService.java

    @Service
public class FaqArticleService extends AbstractService<FaqArticle, Long> {

    @Autowired
    private FaqArticleRepository faqArticleRepository;

    @Autowired
    private DTOToDomainConverstionService dtoToDomainConverstionService;

    public FaqArticleService(FaqArticleRepository faqArticleRepository) {
        super(faqArticleRepository);
        this.faqArticleRepository = faqArticleRepository;
    }

    public FaqArticle getById(Long id) {
        return faqArticleRepository.findOne(id);
    }

    @Transactional
    public FaqArticle createFaqArticle(FaqArticleDTO faqArticleDTO) {
        FaqArticle faqArticle = dtoToDomainConverstionService.convertFaqArticle(faqArticleDTO);
        return faqArticleRepository.save(faqArticle);
    }

    public Page<FaqArticle> getAllFaqArticle(Pageable pageable) {
        return faqArticleRepository.findAll(pageable);
    }

    public List<FaqArticle> getAllFaqArticle() {
        return faqArticleRepository.findAll();
    }

    @Transactional
    public void deleteFaqArticle(Long id) {
        FaqArticle faqArticle = getById(id);
        faqArticleRepository.delete(faqArticle);
    }

    @Transactional
    public void deleteAllFaqArticle() {
        faqArticleRepository.deleteAll();
    }

}
    @Service
public class DTOToDomainConverstionService {

    public FaqCategory convertFAQCategory(FaqCategoryDTO faqCategoryDTO) {

        FaqCategory faqCategory = new FaqCategory();
        Set<FaqArticleDTO> faqArticleDTOs = faqCategoryDTO.getFaqArticleDTO();
        Set<FaqArticle> faqArticles = new HashSet<FaqArticle>();
        for (FaqArticleDTO faqArticleDTO : faqArticleDTOs) {
            FaqArticle faqArticle = new FaqArticle();
            faqArticle.setBody(faqArticleDTO.getBody());
            faqArticle.setPublish(faqArticleDTO.getPublish());
            faqArticle.setKeywords(faqArticleDTO.getKeywords());
            faqArticle.setFaqCategory(faqCategory);
            Set<FaqArticle> subfaqArticles = new HashSet<FaqArticle>();
            for (FaqArticleDTO subfaqArticleDTO : faqArticleDTO.getFaqRelatedArticles()) {
                FaqArticle subfaqArticle = new FaqArticle();
                subfaqArticle.setBody(subfaqArticleDTO.getBody());
                subfaqArticle.setPublish(subfaqArticleDTO.getPublish());
                subfaqArticle.setKeywords(subfaqArticleDTO.getKeywords());
                subfaqArticle.setFaqCategory(faqCategory);
                subfaqArticles.add(subfaqArticle);
            }
            faqArticle.setFaqRelatedArticles(subfaqArticles);
            faqArticles.add(faqArticle);
        }
        faqCategory.setDisplayName(faqCategoryDTO.getDisplayName());
        faqCategory.setSummary(faqCategoryDTO.getSummary());
        faqCategory.setFaqArticle(faqArticles);
        return faqCategory;
    }

    public FaqArticle convertFaqArticle(FaqArticleDTO faqArticleDTO) {

        FaqArticle faqArticle = new FaqArticle();
        faqArticle.setBody(faqArticleDTO.getBody());
        faqArticle.setPublish(faqArticleDTO.getPublish());
        faqArticle.setKeywords(faqArticleDTO.getKeywords());
        /*Set<FaqArticle> subfaqArticles = new HashSet<FaqArticle>();
        for (FaqArticleDTO subfaqArticleDTO : faqArticleDTO.getFaqRelatedArticles()) {
            FaqArticle subfaqArticle = new FaqArticle();
            subfaqArticle.setBody(subfaqArticleDTO.getBody());
            subfaqArticle.setPublish(subfaqArticleDTO.getPublish());
            subfaqArticle.setKeywords(subfaqArticleDTO.getKeywords());
            subfaqArticles.add(subfaqArticle);
        }
        faqArticle.setFaqRelatedArticles(subfaqArticles);*/
        return faqArticle;
    }
}
@服务
公共类DTotomainConversationService{
公共FaqCategory convertFAQCategory(FAQCategoryTo FAQCategoryTo){
FaqCategory FaqCategory=新建FaqCategory();
设置faqArticleDTOs=FaqCategoryTo.getFaqArticleDTO();
Set faqArticles=newhashset();
适用于(常见问题解答文章至常见问题解答文章至:常见问题解答文章至){
FaqArticle FaqArticle=新建FaqArticle();
setBody(faqArticleDTO.getBody());
setPublish(faqArticleDTO.getPublish());
faqArticle.setKeywords(faqArticleDTO.getKeywords());
faqArticle.setFaqCategory(faqCategory);
Set subfaqArticles=newhashset();
for(FaqArticleDTO子AQArticledTo:FaqArticleDTO.getFaqRelatedArticles()){
FaqArticle subfaqArticle=新建FaqArticle();
subAQarticle.setBody(subAQarticledTo.getBody());
subAQarticle.setPublish(subAQarticledto.getPublish());
subAQarticle.setKeywords(subAQarticledto.getKeywords());
子类文章。设置faqCategory(faqCategory);
子条款。添加(子条款);
}
faqArticle.setFaqRelatedArticles(子类文章);
添加(faqArticle);
}
faqCategory.setDisplayName(FaqCategoryTo.getDisplayName());
faqCategory.setSummary(faqCategoryDTO.getSummary());
faqCategory.setFaqArticle(faqArticles);
返回常见问题解答类别;
}
公共常见问题解答文章转换常见问题解答文章(常见问题解答文章到常见问题解答文章){
FaqArticle FaqArticle=新建FaqArticle();
setBody(faqArticleDTO.getBody());
setPublish(faqArticleDTO.getPublish());
faqArticle.setKeywords(faqArticleDTO.getKeywords());
/*Set subfaqArticles=newhashset();
for(FaqArticleDTO子AQArticledTo:FaqArticleDTO.getFaqRelatedArticles()){
FaqArticle subfaqArticle=新建FaqArticle();
subAQarticle.setBody(subAQarticledTo.getBody());
subAQarticle.setPublish(subAQarticledto.getPublish());
subAQarticle.setKeywords(subAQarticledto.getKeywords());
子条款。添加(子条款);
}
faqArticle.setFaqRelatedArticles(子类文章)*/
返回常见问题解答文章;
}
}

您应该将
FaqArticle
上的
faqCategory
属性显式设置为空


如果您确实希望将该值设置为非空值,您应该确保在活动会话的边界内获取适当的
FaqArticle
,以便在保存新的
FaqArticle
时不会分离实例,以避免此失败。

请添加此方法dtotomainconversationservice.convertFaqArticle。
@RestController
@RequestMapping(value = "/faqArticles")
public class FaqArticleController {

    @Autowired
    private FaqArticleService faqArticleService;

    @Autowired
    private FaqArticleResourceAssembler faqArticleResourseAssembler;

    @Autowired
    private PagedResourcesAssembler<FaqArticle> pagedResourcesAssembler;

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<PagedResources> getAllFaqArticle(Pageable pageable) {
        Page<FaqArticle> faqArticlePage = faqArticleService.getAllFaqArticle(pageable);
        PagedResources pagedResources = pagedResourcesAssembler.toResource(faqArticlePage, faqArticleResourseAssembler);

        if (faqArticlePage.getContent() == null || faqArticlePage.getContent().isEmpty()) {
            EmbeddedWrappers wrappers = new EmbeddedWrappers(false);
            EmbeddedWrapper wrapper = wrappers.emptyCollectionOf(FaqCategory.class);
            List<EmbeddedWrapper> embedded = Collections.singletonList(wrapper);
            pagedResources = new PagedResources(embedded, pagedResources.getMetadata(),
                    pagedResources.getLinks());
        }
        return new ResponseEntity<PagedResources>(pagedResources, HttpStatus.OK);
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public ResponseEntity<FaqArticleResource> getFaqArticle(@PathVariable Long id){
        FaqArticle faqArticle = faqArticleService.getById(id);
        FaqArticleResource rsource = faqArticleResourseAssembler.toResource(faqArticle);
        return  new ResponseEntity<FaqArticleResource>(rsource, HttpStatus.OK);
    }

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<FaqArticleResource> saveFaqArticle(@RequestBody FaqArticleDTO faqArticleDTO){
        FaqArticle faqArticle = faqArticleService.createFaqArticle(faqArticleDTO);
        FaqArticleResource rsource = faqArticleResourseAssembler.toResource(faqArticle);
        return  new ResponseEntity<FaqArticleResource>(rsource, HttpStatus.CREATED);
    }

    @RequestMapping(method = RequestMethod.DELETE)
    public ResponseEntity<Void> deleteAllFaqArticle(){
        faqArticleService.deleteAllFaqArticle();
        return ResponseEntity.noContent().build();
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
    public ResponseEntity<Void> deleteFaqArticle(@PathVariable Long id){
        faqArticleService.deleteFaqArticle(id);
        return ResponseEntity.noContent().build();
    }
}
# server config block
server.port = 9999

# Connection url for the database "netgloo_blog"
spring.datasource.url = jdbc:mysql://localhost:3306/assistlane?createDatabaseIfNotExist=true&verifyServerCertificate=false&useSSL=false&requireSSL=false
spring.datasource.dataSourceClassName=com.mysql.jdbc.Driver

#spring.data.rest.basePath=/api

# Username and password
spring.datasource.username = root
spring.datasource.password = root

# Show or not log for each sql query
spring.jpa.show-sql = true

# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

spring.jpa.properties.org.hibernate.envers.audit_table_suffix=_audit 
spring.jpa.properties.org.hibernate.envers.store_data_at_delete= true

# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
    @Service
public class DTOToDomainConverstionService {

    public FaqCategory convertFAQCategory(FaqCategoryDTO faqCategoryDTO) {

        FaqCategory faqCategory = new FaqCategory();
        Set<FaqArticleDTO> faqArticleDTOs = faqCategoryDTO.getFaqArticleDTO();
        Set<FaqArticle> faqArticles = new HashSet<FaqArticle>();
        for (FaqArticleDTO faqArticleDTO : faqArticleDTOs) {
            FaqArticle faqArticle = new FaqArticle();
            faqArticle.setBody(faqArticleDTO.getBody());
            faqArticle.setPublish(faqArticleDTO.getPublish());
            faqArticle.setKeywords(faqArticleDTO.getKeywords());
            faqArticle.setFaqCategory(faqCategory);
            Set<FaqArticle> subfaqArticles = new HashSet<FaqArticle>();
            for (FaqArticleDTO subfaqArticleDTO : faqArticleDTO.getFaqRelatedArticles()) {
                FaqArticle subfaqArticle = new FaqArticle();
                subfaqArticle.setBody(subfaqArticleDTO.getBody());
                subfaqArticle.setPublish(subfaqArticleDTO.getPublish());
                subfaqArticle.setKeywords(subfaqArticleDTO.getKeywords());
                subfaqArticle.setFaqCategory(faqCategory);
                subfaqArticles.add(subfaqArticle);
            }
            faqArticle.setFaqRelatedArticles(subfaqArticles);
            faqArticles.add(faqArticle);
        }
        faqCategory.setDisplayName(faqCategoryDTO.getDisplayName());
        faqCategory.setSummary(faqCategoryDTO.getSummary());
        faqCategory.setFaqArticle(faqArticles);
        return faqCategory;
    }

    public FaqArticle convertFaqArticle(FaqArticleDTO faqArticleDTO) {

        FaqArticle faqArticle = new FaqArticle();
        faqArticle.setBody(faqArticleDTO.getBody());
        faqArticle.setPublish(faqArticleDTO.getPublish());
        faqArticle.setKeywords(faqArticleDTO.getKeywords());
        /*Set<FaqArticle> subfaqArticles = new HashSet<FaqArticle>();
        for (FaqArticleDTO subfaqArticleDTO : faqArticleDTO.getFaqRelatedArticles()) {
            FaqArticle subfaqArticle = new FaqArticle();
            subfaqArticle.setBody(subfaqArticleDTO.getBody());
            subfaqArticle.setPublish(subfaqArticleDTO.getPublish());
            subfaqArticle.setKeywords(subfaqArticleDTO.getKeywords());
            subfaqArticles.add(subfaqArticle);
        }
        faqArticle.setFaqRelatedArticles(subfaqArticles);*/
        return faqArticle;
    }
}