我一直在這個問題上徘徊數小時。我有兩個型號:Play Framework 2.1和Ebean:模型Finder不返回任何數據
@Entity
@Table(name = "app_user")
public class AppUser extends Model {
@Id
Long id;
…
@Constraints.Required
@Valid
@OneToOne(cascade = CascadeType.ALL, optional = false)
public LocationAddress address;
@Valid
@OneToOne(cascade = CascadeType.ALL, optional = true)
public LocationAddress addressBilling;
…
}
@Entity
@Table(name = "location_address")
public class LocationAddress extends Model {
@Id
Long id;
@Constraints.Required
@Constraints.MaxLength(TextSize.DEFAULT)
@Column(length = TextSize.DEFAULT, nullable = false)
public String street;
@Constraints.MaxLength(TextSize.TINY)
@Column(length = TextSize.TINY)
public String streetNo;
@ManyToOne(cascade = CascadeType.PERSIST, optional = false)
public Country country;
…
@OneToOne(mappedBy = "address")
public AppUser userAddress;
@OneToOne(mappedBy = "addressBilling")
public AppUser userAddressBilling;
@OneToOne(mappedBy = "address")
public AdvertisingLocation advertisingLocationAddress;
// -- Queries
public static Finder<Long, LocationAddress> find = new Finder<Long, LocationAddress>(Long.class, LocationAddress.class);
public static List<LocationAddress> all() {
return find.all();
}
public static LocationAddress findById(long id) {
return find.byId(id);
}
}
的問題是,LocationAddress.all()
回報什麼,從而AppUser.findById(1).address.street
拋出EntityNotFoundException: Bean has been deleted - lazy loading failed
。不用說,數據庫表不是空的。
有趣的是,Ebean.find(LocationAddress.class).findRowCount()
返回3(這是正確的)。
任何人看到可能是什麼問題?謝謝。
我不明白答案。你是如何解決問題的?我看到同樣的事情。 – 2013-09-10 14:37:25
如果它是一個雙向關係,則關係的兩邊不得爲null,以便返回的對象,如此處所示。我將其改爲單向關係,因此即使一方爲空也會返回對象。 – KristijanBambir 2013-09-16 06:15:57
啊。你從類中刪除了所有'@ OneToOne'字段,然後'find.all'worked。我現在明白了。但在我看來,更需要挖掘它。在你的情況下,你不需要它們。其他人可能需要他們。你可以發佈你的數據庫,這樣我可以重現這一點? – 2013-09-17 04:30:18