Tôi mới trong JPA và tôi gặp sự cố khi cố gắng truy vấn cơ sở dữ liệu bằng hàm MAX(). Mã chức năng của tôi đang theo dõi. Ai giúp tôi với? Cảm ơn bạn.Không thể có giá trị đúng với truy vấn SELECT bằng MAX() trong JPA
public int getMaxId(){
entityManager = this.entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery("SELECT * FROM user WHERE id = (SELECT MAX(u.id) FROM user u)");
User user = (User) query.getSingleResult();
int id = user.getId();
return id;
}
Tôi đang sử dụng JPA, TopLink và Apache Derby. Phương thức của tôi sẽ trả về id tối đa của người dùng bảng.
Edit: Tôi gọi đó là chức năng từ một dịch vụ:
try {
int id = userDAO.getMaxId();
logger.info("Max id: " + id);
user.setId(id+1);
}
catch (Exception ex){
logger.error("Unable to get the max id.");
}
Giá trị của user.setId()
luôn là '0'.
Chỉnh sửa (2): Đăng nhập
Caused by: Exception [EclipseLink-8034] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [SELECT u FROM user u WHERE u.id = (SELECT MAX(uu.id) FROM user uu)]. Unknown entity type [user].
at org.eclipse.persistence.exceptions.JPQLException.entityTypeNotFound(JPQLException.java:483)
at org.eclipse.persistence.internal.jpa.parsing.ParseTreeContext.classForSchemaName(ParseTreeContext.java:138)
at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getClassOfFirstVariable(SelectNode.java:327)
at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getReferenceClass(SelectNode.java:316)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.getReferenceClass(ParseTree.java:436)
at org.eclipse.persistence.internal.jpa.parsing.ParseTree.adjustReferenceClassForQuery(ParseTree.java:75)
at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateReadQueryInternal(JPQLParseTree.java:103)
at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateQuery(JPQLParseTree.java:84)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:219)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:190)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:142)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:126)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1475)
... 35 more
thực thể của tôi User
được khai báo như sau:
@Entity
@Table(name = "user")
public class User {
@Id
private int id;
private String name;
private String lastName;
private String city;
private String password;
Tôi khuyên bạn nên sử dụng các giá trị ID đã tạo. – JMelnik
Bạn không nên nuốt ngoại lệ, hãy thử sử dụng 'ex.printStackTrace()' để in đầy đủ lỗi ngăn xếp để biết thêm chi tiết. –
@JMelnik Có, tôi đồng ý nhưng tôi muốn hiểu JPA/JPQL hoạt động như thế nào khi cố gắng sử dụng các truy vấn và truy vấn liên tục. – Spacemonkey