我发现播放框架有问题。我也可以重现它,所以在这里我将展示一个简化的重现场景。
启动播放应用程序时,我想从 yaml 文件中读取示例数据。因此,我使用类 Fixtures。在 yaml 文件中,我准备了相互关联的对象的数据结构。
数据结构的模型类如下所示:
@Entity
public class Album extends Model{
public String name;
@ManyToOne
public Artist artist;
}
@Entity
public class Artist extends Model{
public String name;
@OneToMany(mappedBy="artist")
public List<Album> albums = new ArrayList<Album>();
}
我用来加载 yaml 文件并控制结果的作业如下所示:
@OnApplicationStart
public class Bootstrap extends Job {
@Override
public void doJob(){
Fixtures.deleteAllModels();
Fixtures.loadModels("sample.yml");
List<Artist> artists = Artist.findAll();
for (Artist artist : artists) {
play.Logger.info(artist.name + " has " + artist.albums.size() + " albums");
}
}
}
如果我在我的 yml 文件中使用以下结构,那么它可以工作:
Artist(b1):
name: Nirvana
Artist(b2):
name: ACDC
Album(a1):
name: Back in Black
artist: b2
Album(a2):
name: Highway to Hell
artist: b2
Album(a3):
name: Nevermind
artist: b1
Album(a4):
name: Bleach
artist: b1
但是,如果我这样做,那么它将无法正常工作:
Album(a1):
name: Back in Black
Album(a2):
name: Highway to Hell
Album(a3):
name: Nevermind
Album(a4):
name: Bleach
Artist(b1):
name: Nirvana
albums: [a3,a4]
Artist(b2):
name: ACDC
albums: [a1,a2]
但是,此处的文档告诉我们,第二种方法应该有效。
我在示例代码中是否犯了错误,或者这真的是播放框架或 JPA 的问题?