0

1 対多で必要なときに遅延読み込みが発生しない状況があります。明らかに、私はこれに慣れていません。s.getSongComposers() を呼び出したときに、SongComposers がフェッチされないのはなぜですか?

これが私のDAOクラスです:

public class SongDAOImpl implements SongDAO {

    @PersistenceContext
    private EntityManager em;

    @Override
    @SuppressWarnings(value = { "unchecked" })
    public List<Song> getAllSongsOnAlbum(int albumID) {
        Query q = em.createQuery("SELECT s FROM Song s WHERE s.album.albumID  = :albumid ORDER BY s.songName");
        q.setParameter("albumid", albumID);
        List<Song> list = (List<Song>) q.getResultList();
        for (Song s: list) {
            s.getSongComposers();
        }
        return list;
    }

}

ここに私の歌のエンティティがあります:

@Entity
@Table(name="songs")
public class Song {

    @Id
    @GeneratedValue
    @Column(name="SongID")
    private int songID;

    @Column(name="SongName")
    private String songName;

    @Column(name="Length")
    private int length;

    @ManyToOne
    @JoinColumn(name="AlbumID", referencedColumnName="AlbumID")
    private Album album;

    @OneToMany(mappedBy="song")
    private List<SongComposer> songComposers;


      .... all getters/setters ......
      }

ここに私の SongComposer エンティティがあります:

@Entity
@Table(name="song_composer")
public class SongComposer {


    @Id
    @GeneratedValue
    @Column(name="SongComposerID")
    private int songComposerID;


    @ManyToOne
    @JoinColumn(name="SongID", referencedColumnName="SongID")
    private Song song;


    @ManyToOne
    @JoinColumn(name="ComposerID", referencedColumnName="ComposerID")
    private Composer composer;


         ..... getters/setters .......

}
4

1 に答える 1

1

明示的に行う必要があります。このクエリを試してください:

SELECT DISTINCT s FROM Song s JOIN FETCH s.songComposers WHERE s.album.albumID  = :albumid ORDER BY s.songName"
于 2012-06-27T16:30:46.830 に答える