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
에서
'@ManyToOne createdBy'에 추가 하시겠습니까? '@ OneToMany'가 아니어야합니까? 아니면 단일 엔터티에 많은 제작자가 있습니까? – eis
나에게 그것은 createdBy를 올바르게 설정하지 않은 것처럼 보이지만 동일한 객체를 가리키고있는 것 같습니다 – eis
@eis 많은 속성이 한 사용자에 의해 만들어 질 수 있습니다 – Seroney