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
'@ManyToOne createdBy'に追加しますか?それは '@ OneToMany'であってはいけませんか、単一のエンティティにはたくさんのクリエイターがいますか? – eis
私にはcreatedByを正しく設定していないようですが、同じオブジェクトを指しています – eis
@eis多くのプロパティは1人のユーザーが作成できます – Seroney