2017-12-14 19 views
1

UserAccount, CompanyMst 및 Property Master의 세 가지 모델이 있습니다.사이클 Ebean 및 Jackson으로 이어지는 직접 자체 참조

나는 모두에 데이터를 삽입 할 수 있지만 목록을 JSon 객체로 검색 할 때 아래 오류가 발생합니다.

모델은 다음과 같습니다.

@Entity 

public class UserAccount extends Model { 
@Id 
public Long id; 

@Constraints.Email 
public String email = ""; 

public String password = ""; 

public String firstname = ""; 

public String lastname = ""; 

public String telno = ""; 

public String activationbytecode = ""; 

public String authtoken; 

public String createToken() { 
    authtoken = UUID.randomUUID().toString(); 
    save(); 
    return authtoken; 
} 

public void deleteAuthToken() { 
    authtoken = null; 
    save(); 
} 

@Formats.DateTime(pattern = "yyyy-MM-dd hh:mm:ss") 
public Date createdOn = new Date(); 

@ManyToOne 
public UserAccount createdby; 

@Formats.DateTime(pattern = "yyyy-MM-dd hh:mm:ss") 
public Date activatedOn; 

public boolean activationstatus = false; 

public boolean accountstatus = false; 

@ManyToOne 
@Constraints.Required 
@JsonBackReference 
public CompanyMst company; 

@ManyToOne 
public Roles role; 

@Formats.DateTime(pattern = "yyyy-MM-dd hh:mm:ss") 
public Date updatedon; 

@ManyToOne 
public UserAccount updateby; 




} 

회사 모델은 아래와 같습니다.

@Entity 

public class CompanyMst extends Model { 
    @Id 
    public Long id; 

    @Constraints.Required 
    public String name; 

    @Constraints.Required 
    public Integer buildingmanaged; 

    public Boolean isactive = false; 

    @Constraints.Required 
    public String address; 

    @Constraints.Required 
    @Constraints.Email 
    public String email; 

    @Constraints.Required 
    public String telno; 

    @Formats.DateTime(pattern="yyyy-MM-dd hh:mm:ss") 
    public Date subscriptiondatefrom; 

    @Formats.DateTime(pattern="yyyy-MM-dd hh:mm:ss") 
    public Date subscriptiondateto; 

    public Boolean subscriptionisexpired = false; 

    @Formats.DateTime(pattern="yyyy-MM-dd hh:mm:ss") 
    public Date createdon = new Date(); 

    @ManyToOne 
    public UserAccount createdbyuser; 

    @Formats.DateTime(pattern="yyyy-MM-dd hh:mm:ss") 
    public Date updatedon; 

    @ManyToOne 
    public UserAccount updateby; 

    public static Finder<Long,CompanyMst> find = new Finder <>(CompanyMst.class); 

    public static CompanyMst findByCompanyName(String name){ 
     return find.query().where().eq("name",name).findOne(); 
    } 

    public static int getCompanyCount() { 
     return find.query().where().eq("isactive",true).findCount(); 
    } 





} 

속성 모델은 다음과 같이있는 동안

@Entity 

public class PropertyMst extends Model { 
@Id 
public Long id; 

public String code = ""; 

public String propertyname = ""; 

public String description = ""; 

public Boolean isactive = true; 

public String plotlandnumber = ""; 

public Boolean islettable = Boolean.TRUE; 

public Boolean depositrequired = Boolean.TRUE; 

@Constraints.Required 
public Integer nooflettableunits; 

public String address =""; 

@ManyToOne 
@JsonManagedReference 
public CompanyMst companyMst; 

@WhenCreated 
@Formats.DateTime(pattern="yyyy-MM-dd hh:mm:ss") 
public Date createdon = new Date(); 

// @WhoCreated 
@ManyToOne 
public UserAccount createdbyuser; 


@Formats.DateTime(pattern="yyyy-MM-dd hh:mm:ss") 
public Date updatedon; 

// @WhoModified 
@ManyToOne 
public UserAccount updatedby; 

public static Finder<Long,PropertyMst> find = new Finder <>(PropertyMst.class); 

public static PropertyMst findByPropertyName(String propertyname){ 

    return PropertyMst.find.query().where().eq("propertyname",propertyname).findOne(); 
} 

public static List<PropertyMst> propertyMstList(){ 
    return new ArrayList<>(PropertyMst.find.query().where().eq("isactive",true).findList()); 

} 

public static Map<String, String> options(CompanyMst companyMst){ 
    LinkedHashMap<String,String> options=new LinkedHashMap<String,String>(); 
    for(PropertyMst c:PropertyMst.find.query().where() 
      .eq("isactive",true) 
      .eq("companyMst",companyMst) 
      .findList()){ 
     options.put(c.id.toString(),c.propertyname); 
    } 

    return options; 
} 

public static int getTotalProperties(){ 
    return PropertyMst.find.all().size(); 
} 

public static int getCompanyProperties(CompanyMst companyMst){ 
    return PropertyMst.find.query().where().eq("companyMst", companyMst).findCount(); 
} 

public static PropertyMst getPropertyByCompany(CompanyMst companyMst){ 
    return PropertyMst.find.query().where().eq("companyMst",companyMst).findOne(); 
} 

public static List<PropertyMst> getPropertyByCompanyList(CompanyMst companyMst){ 
    return PropertyMst.find.query().where().eq("companyMst",companyMst).findList(); 
} 

}

하지 내가이 오류

받고 있어요 확실한 이유

직접 자기 참조를 통해 (순환 선도 참조 체인 : io.ebean.common.BeanList [0] -> models.PropertyMst [ "companyMst"] -> models.CompanyMst [ "createdbyuser"] -> models.UserAccount [ "createdby"]) play.libs.Json.toJson

에서
+0

'@ManyToOne createdBy'에 추가 하시겠습니까? '@ OneToMany'가 아니어야합니까? 아니면 단일 엔터티에 많은 제작자가 있습니까? – eis

+0

나에게 그것은 createdBy를 올바르게 설정하지 않은 것처럼 보이지만 동일한 객체를 가리키고있는 것 같습니다 – eis

+0

@eis 많은 속성이 한 사용자에 의해 만들어 질 수 있습니다 – Seroney

답변

0

사용자 모델

@JsonBackReference 
@ManyToOne 
public UserAccount createdby;