JPA使用状況の記録

1130 ワード

一、取得記録総数の問題
例:
public Integer findRows(Comment entity) {
	BigInteger result = BigInteger.ZERO;
	StringBuilder sql = new StringBuilder();
	sql.append(" SELECT COUNT(c.id) FROM ");
	sql.append(" t_comment c ");
	sql.append(" WHERE ");
	sql.append(" c.belong_id=:belongId ");
	sql.append(" AND c.belong_type=:belongType ");

	logger.info("SQL:{}", sql.toString());
	Query query = em.createNativeQuery(sql.toString(),Integer.class);
	query.setParameter("belongId", entity.getBelongId());
	query.setParameter("belongType", entity.getBelongType());

	result = (BigInteger) query.getSingleResult();
	return result.intValue();
}

例外:
javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown entity: java.lang.Integer
解決方法:
Query query = em.createNativeQuery(sql.toString(),Integer.class); ===>
Query query = em.createNativeQuery(sql.toString());
同時にc.idのデータ型に注意して、私のライブラリはBigIntを使って、しかも原生のSQLクエリーなので、自動的にBigIntegerにマッピングして、
非ネイティブSQLクエリーの場合は、Entityで定義したタイプにマッピングされる可能性があります.