2017-12-14 17 views
1

私はUserAccount、CompanyMstとProperty Masterという3つのモデルを持っています。サイクルEbeanとジャクソンにつながる直接自己参照

すべてにデータを挿入できますが、リストを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"] - > play.libs.Json.toJson

+0

'@ManyToOne createdBy'に追加しますか?それは '@ OneToMany'であってはいけませんか、単一のエンティティにはたくさんのクリエイターがいますか? – eis

+0

私にはcreatedByを正しく設定していないようですが、同じオブジェクトを指しています – eis

+0

@eis多くのプロパティは1人のユーザーが作成できます – Seroney

答えて

0

でmodels.UserAccount [ "CREATEDBYは"])、ユーザモデル

@JsonBackReference 
@ManyToOne 
public UserAccount createdby; 
関連する問題