Я написал следующий фрагмент кода для извлечения записей определенных zip-файлов из таблицы zips
, используя hibernate
в качестве поставщика JPA.
public List<ZipEntity> getZipEntityFromZipName(String zipName, String version, String createdBy,
String type) throws FileException {
int numAttempts = 0;
do {
numAttempts++;
EntityManager entityManager = getNewEntityManager();
try {
TypedQuery<ZipEntity> query = entityManager
.createNamedQuery(Constants.Database.Queries.GET_FROM_ZIP_NAME, ZipEntity.class)
.setParameter("zipName", zipName)
.setParameter("version", version)
.setParameter("createdBy", createdBy)
.setParameter("type", type);
return query.getResultList();
} catch (PersistenceException e) {
validatePersistenceException(e);
} finally {
closeEntityManager(entityManager);
}
} while (numAttempts <= maxRetries);
throw new FileException("Database connection failed.");
Вот соответствующие классы сущностей
@NamedNativeQueries({
@NamedNativeQuery(
name = Constants.Database.Queries.GET_FROM_ZIP_NAME,
query = Constants.Database.Queries.GET_FROM_ZIP_NAME_QUERY,
resultClass = ZipEntity.class
)
})
@Entity
@Table(name = "zips")
public class ZipEntity {
@EmbeddedId
private ZipKey ZipKey;
public ZipEntity() {
}
public ZipEntity(String zipName, String version, String createdBy, String file, String type,
String extension) {
this.ZipKey = new ZipKey(zipName, version, createdBy, file, type, extension);
}
}
@Embeddable
public class ZipKey implements Serializable {
static final long serialVersionUID = 1L;
@Column(name = "zip_name")
private String zipName;
@Column(name = "version")
private String version;
@Column(name = "created_by")
private String createdBy;
@Column(name = "filepath")
private String file;
@Column(name = "type")
private String type;
@Column(name = "extension")
private String extension;
// Getter, setters and Constructor
}
И запрос в классе Constant выглядит следующим образом:
public static final String GET_FROM_ZIP_NAME = "getFile";
public static final String GET_FROM_ZIP_NAME_QUERY = "SELECT * FROM zips WHERE zip_name = " +
":zipName AND version = :version AND created_by = :createdBy AND type = :type";
Событие, хотя setMaxResults()
не определено для вышеуказанного запроса, результаты, полученные из приведенного выше фрагмента кода, ограничены25 записей, хотя тот же запрос, выполненный в БД, приводит к 35 записям.Что я здесь не так делаю?