首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Optaplanner: InverseRelationShadowVariable的问题

Optaplanner: InverseRelationShadowVariable的问题
EN

Stack Overflow用户
提问于 2022-09-02 15:47:00
回答 1查看 32关注 0票数 0

有一个多-1关系小学生小组:学生被分配到一个formGroup和一个formGroup可以包含许多学生.我试图实现一个InverseRelationShadowVariable,看过您的视频/教程https://www.youtube.com/watch?v=ENKHGBMDaCM (这与我了解的最新optaplanner文档不太相符)。

FormGroup提取物

代码语言:javascript
复制
@Entity
@PlanningEntity 
public class FormGroup { 

    @InverseRelationShadowVariable(sourceVariableName = "formGroup")
    @OneToMany(mappedBy = "formGroup", fetch = FetchType.EAGER)
    private List<Pupil> pupilList = new ArrayList<Pupil>();

    public List<Pupil> getPupilList() {
      return pupilList;
     }

    public Integer getPupilCount() {
      return pupilList.size();
     }

瞳孔提取物

代码语言:javascript
复制
@Entity
@PlanningEntity
public class Pupil 

 @PlanningVariable(valueRangeProviderRefs = "formGroupRange")
 @ManyToOne
 private FormGroup formGroup;

配置提取

代码语言:javascript
复制
   <solutionClass>org.acme.optaplanner.domain.Plan</solutionClass>
   <entityClass>org.acme.optaplanner.domain.Pupil</entityClass>
   <entityClass>org.acme.optaplanner.domain.FormGroup</entityClass> 

我相信我完全遵循了视频中的步骤(难道我们不都这么说),但在解决问题的时候,我得到了数百个错误.重复下列内容

在com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)

任何感激不尽的暗示。

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 16:21:58

InverseRelationShadowVariable在真正的规划实体(Pupil)和规划值(FormGroup)之间创建双向关系。如果您将计划域类重用于其他用途(如ORM持久性或序列化),则可能会出现问题。

在这种情况下,Jackson无法序列化瞳孔,因为它引用了一个FormGroup,该列表包含对该瞳孔的引用。看见?无穷无尽的循环。

通过在逆关系属性的顶部添加@JsonIgnore注释并中断杰克逊的循环,可以解决这个问题:

代码语言:javascript
复制
@Entity
@PlanningEntity 
public class FormGroup { 

    @JsonIgnore // THIS IS THE FIX
    @InverseRelationShadowVariable(sourceVariableName = "formGroup")
    @OneToMany(mappedBy = "formGroup", fetch = FetchType.EAGER)
    private List<Pupil> pupilList = new ArrayList<Pupil>();

    public List<Pupil> getPupilList() {
      return pupilList;
    }

    public Integer getPupilCount() {
      return pupilList.size();
    }
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73585102

复制
相关文章

相似问题

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