Integer
而不是Long
。@Entity
public class Order {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private User user;
// 省略 getter 和 setter 方法
}
@Entity
public class Order {
@Id
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
private User user;
// 省略 getter 和 setter 方法
}
List<Object[]> results = entityManager.createQuery(
"SELECT u.id, u.name FROM User u WHERE u.department.id = :departmentId", Object[].class)
.setParameter("departmentId", departmentId)
.getResultList();
SELECT *
查询,明确指定需要的字段。例如:List<User> users = entityManager.createQuery(
"SELECT new com.example.UserDto(u.id, u.name, u.email) FROM User u", UserDto.class)
.getResultList();
hibernate.default_batch_fetch_size=32
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i < 1000; i++) {
User user = new User();
user.setName("User " + i);
user.setEmail("user" + i + "@example.com");
session.persist(user);
if (i % 50 == 0) { // 批量大小为 50
session.flush();
session.clear();
}
}
tx.commit();
session.close();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hql = "UPDATE User SET active = false WHERE lastLogin < :lastLogin";
Query query = session.createQuery(hql);
query.setParameter("lastLogin", lastLoginDate);
int updatedCount = query.executeUpdate();
tx.commit();
session.close();
hibernate.cache.use_second_level_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
read-only
、read-write
、nonstrict-read-write
和transactional
。例如:@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class User {
// 省略字段和方法
}
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
<dependency>
<groupId>com.zaxxergroupId>
<artifactId>HikariCPartifactId>
<version>5.0.1version>
dependency>
@Service
public class UserService {
@Transactional
public void updateUser(User user) {
// 更新用户信息的代码
}
}
@Transactional(readOnly = true, isolation = Isolation.READ_COMMITTED)
public List<User> findAllUsers() {
return userRepository.findAll();
}
@Entity
public class User {
@Id
private Long id;
@Column(nullable = false, unique = true)
@Index(name = "idx_username")
private String username;
// 省略其他字段和方法
}
hibernate.cache.use_query_cache=true
hibernate.show_sql=false
hibernate.format_sql=false
@Entity
@NamedQueries({
@NamedQuery(
name = "User.findByUsername",
query = "SELECT u FROM User u WHERE u.username = :username"
)
})
public class User {
// 省略字段和方法
}
@Entity
public class Order {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private User user;
// 省略 getter 和 setter 方法
}
JOIN FETCH
来优化查询。例如:List<User> users = entityManager.createQuery(
"SELECT u FROM User u JOIN FETCH u.department WHERE u.department.id = :departmentId", User.class)
.setParameter("departmentId", departmentId)
.getResultList();
通过优化实体类设计、合理使用懒加载与急加载策略、优化查询操作、使用批处理操作、合理使用二级缓存、优化数据库连接池、优化事务管理、使用数据库索引、优化 Hibernate 配置以及使用延迟初始化和关联加载优化等方法,可以有效提高 ORM 框架的性能。在实际开发中,应根据具体的业务需求和应用场景,选择合适的优化策略,以达到最佳的性能效果。