首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >API Rest -使用JPA和Hibernate的OneToMany / ManyTone

API Rest -使用JPA和Hibernate的OneToMany / ManyTone
EN

Stack Overflow用户
提问于 2018-12-16 20:37:19
回答 1查看 75关注 0票数 0

我与这两个实体有以下关系

·运动有很多SportTranslation

·SportTranslation belongsTo体育

·是双向的

当我尝试从SportTranslation访问到体育时,我收到以下错误。

代码语言:javascript
复制
java.lang.StackOverflowError: null
    at java.util.AbstractCollection.toString(AbstractCollection.java:454) ~[na:1.8.0_191]
    at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:510) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]

错误不清楚,并且表不为空。

·我有如下经典的Spring MVC架构

控制器

代码语言:javascript
复制
@RestController
@RequestMapping("/api/public/sports")
public class SportController implements ISportsController {

    Logger logger = LoggerFactory.getLogger(SportController.class);


    @Autowired
    private SportsMethods sportMethods;

    @GetMapping(value = "/")
    @Override
    public ResponseEntity<List<SportDTO>> getSports(Pageable pageable) {
        logger.info("--- Retrieve name of class --- : " +this.getClass().getSimpleName() + " --- Method name --- : " + new Object(){}.getClass().getEnclosingMethod().getName());

        List<SportDTO> sportsMethodsList = sportMethods.retreiveListSports(pageable);

        logger.info("--- Final list ---" + sportsMethodsList);
        return new ResponseEntity<List<SportDTO>>(sportsMethodsList,
                (sportsMethodsList == null || sportsMethodsList.isEmpty()) ? HttpStatus.NO_CONTENT : HttpStatus.OK);
    }

}

·类方法

@Component公共类SportsMethods {

代码语言:javascript
复制
@Autowired
private SportService sportService;

public List<SportDTO> retreiveListSports(Pageable pageable) {

    List<SportDTO> sportList = sportService.retreiveListSports();

    return sportList;
}

}

·服务

代码语言:javascript
复制
@Component
public class SportService implements ISportService {

    Logger logger = LoggerFactory.getLogger(SportService.class);

    @Autowired
    private SportRepository sportRepository;

    @Autowired
    private SportAdapter sportAdapter;

    @Override
    public List<SportDTO> retreiveListSports() {

        List<Sport> sportList = sportRepository.findAll();

        logger.info("--- Retrieve List Of Sports---"+sportList);

        List<SportDTO > sportListDTO = sportAdapter.convertListSport2ListSportDTO(sportList);

        logger.info("--- Retrieve a List Of SportsDTO" +sportListDTO);

        return sportListDTO;

    }

}

·两个适配器(SportAdatper、SportTranslationAdapter)

·SportAdapter

@Component公共类SportAdapter {

代码语言:javascript
复制
Logger logger = LoggerFactory.getLogger(SportAdapter.class);

@Autowired
private SportTranslationAdapter sportTranslationAdapter;

public List<SportDTO> convertListSport2ListSportDTO(List<Sport> sportList) {

    logger.info("--- Sport List adapter" + sportList);

    List<SportDTO> sportDTOList = new ArrayList<SportDTO>();

    for (Sport sport : sportList) {

        SportDTO sportDTO = new SportDTO();
        sportDTO.setId(sport.getId());
        sportDTO.setClave(sport.getClave());
        sportDTO.setSportTranslationDTO(sportTranslationAdapter.convertSportTranslation2SportTranslationDTO(sport.getSportTranslation()));
        sportDTOList.add(sportDTO);
    }


    logger.info("--- Sport DTO List adapter" + sportDTOList);

    return sportDTOList;
}

·SportTranslationAdapter

代码语言:javascript
复制
@Component
public class SportTranslationAdapter {

    Logger logger = LoggerFactory.getLogger(SportTranslationAdapter.class);

    public List<SportTranslationDTO> convertSportTranslation2SportTranslationDTO(List<SportTranslation> list) {
        List<SportTranslationDTO> sportTranslationDTOList = new ArrayList<SportTranslationDTO>();
        for (SportTranslation sportTranslation : list) {
            SportTranslationDTO sportTranslationDTO = new SportTranslationDTO();            
                        sportTranslationDTO.setSportId(sportTranslation.getSport().getId());
            sportTranslationDTO.setName(sportTranslation.getName());
            sportTranslationDTOList.add(sportTranslationDTO);

        }
        return sportTranslationDTOList;
    }

}

·Entities Sport和SportTranslation

·体育运动

代码语言:javascript
复制
@Entity
@Table(name = "sport")
public class Sport implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "sport_id")
    private Long id;

    @Column(name = "clave")
    private String clave;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "sport_id")
    private List<SportTranslation> sportTranslation;

·SportTranslation

代码语言:javascript
复制
@Entity
@Table(name = "sportstranslation")
public class SportTranslation implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "sportstranslation_id")
    private long idSportTranslation;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "sport_id", nullable = true)
    private Sport sport;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "language_id", nullable = true)
    private Language languageId;

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

·语言工作正常,但这不是体育的问题所在。

有人能帮我吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53802178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档