Twirl 템플릿 (Play Framework Java - 2.5.10 사용)에서 일대일 관계에 대한 데이터를 표시하려고했습니다.템플릿에서 관계의 데이터를 표시 할 수 없습니다.
package models;
import java.sql.Date;
import javax.persistence.*;
import com.avaje.ebean.Model;
@Entity
@Table(name = "users")
public class User extends Model {
@Id
@Column(name = "id")
public Long id;
@Column(name = "first_name")
public String firstName;
@Column(name = "middle_name")
public String middleName;
@Column(name = "last_name")
public String lastName;
@Column(name = "date_of_birth")
public Date dateOfBirth;
@Column(name = "sex")
public String sex;
@OneToOne
@JoinColumn(name = "time_zone_id")
public TimeZone timeZone;
public static Finder<Long, User> find = new Finder<>(User.class);
}
와 농부 모델 : 열망으로 설정 일대일 사용자 모델로 가져 오기 유형이있다
package models;
import com.avaje.ebean.Model;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="farmers")
public class Farmer extends Model {
public enum Status {INACTIVE, ACTIVE}
@Id
@Column(name="id")
public Long id;
@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="user_id")
public User user;
@Column(name="profile_pic_url")
public String profilePicUrl;
@Column(name="access_url")
public String accessUrl;
@Column(name="status")
public String status = Status.INACTIVE.name();
@OneToMany(mappedBy = "farmer", targetEntity = Farm.class, fetch = FetchType.LAZY)
public List<Farm> farms;
public static Finder<Long, Farmer> find = new Finder<>(Farmer.class);
public static List<Farmer> getAllActive() {
return Farmer.find.where().eq("status", Status.ACTIVE.name()).findList();
}
}
공지 사항 기본적으로 나는 사용자 모델을 가지고있다. 이제 농부의 데이터를 내 템플릿에 표시하려고합니다. 여기서 농부의 이름은 실제로 연결된 User 모델의 이름입니다.
public class FarmerController extends Controller {
public Result all() {
return ok(farmers.render(Farmer.getAllActive()));
}
public Result farmer(Long id, String url) {
return ok(farmer.render());
}
}
지금이 나에게 바로 농부 데이터를 가져가,하지만 난 사용자 모델을 통해 이름을 표시 할 때, 나는 널 수 :
그래서 난 내 컨트롤러에 이런 짓을. 보다 구체적으로,이 글이 쓰여지는 (사실, 내가 nullnull
를 얻을) 널 (null) 결과 : 나는 무엇을 놓치고
<div><h4>@(farmer.user.firstName + farmer.user.lastName)</h4></div>
?
[play-enhancer] (https://www.playframework.com/documentation/2.5.x/PlayEnhancer)를 사용하고 있습니까? 제대로 기억한다면 모델 인핸서가 뷰를 위해 작동하지 않습니다. 그래서,'Farmer' 모델 안에서'getUser' 메소드를 생성하고 그것을 사용하도록 뷰를 수정해야합니다. – marcospereira
@marcospereira 흠, 고마워요. 참으로 enhancer 플러그인을 사용하고 있습니다. 예를 들어 'Farmer.find.fetch ("user")를 반환하도록 변경하여 예제를 얻을 수 있었지만 where(). eq ("status", Status.ACTIVE.name()). findList(); '나는 관계의 긴 사슬을 횡단하기 위해 계속 할 수 있다고 생각하지 않는다. 그러나 뷰에서 함수를 호출하지 않았으므로'@ farmer.getUser(). firstName()'과 같이 간단하기를 바랍니다. – dotslash
@marcospereira 고맙습니다. 동의 할 수 있도록 아래의 답변으로 추가 할 수 있습니까? :-) (사이드 노트에서 나는이 인핸서 플러그인을 싫어한다 - 그것은 문서에서 마법으로 선전되고 있지만 마술처럼 효과가 없다). – dotslash