public ReleaseFolderRecord getRecord( String tableName, int transitFolderID, privateID, String[] fetch) { Class listClass = getClassForTable(tableName); if ( listClass == null ) { return null; } String className = listClass.getSimpleName(); StringBuffer hql = new StringBuffer( "select r " + " from ReleaseFolderJoin" + className + " as j " + " join j.record as r " ); int count = fetch == null ? 0 : fetch.length; for ( int i = 0; i < count; i++ ) { hql.append( " left join fetch r." ).append( fetch[i] ); } hql.append( "where j.folder.id = :folderId and r.privateID = :privateId" ); return ( ReleaseFolderRecord ) em.createQuery( hql ) .setParameter( "folderId", transitFolderID ) .setParameter( "privateId", privateID ) .getSingleResult(); }