私はSpringブートとJPAを使用します。春のブートのバージョンは1.5.7です。リリース。SpringブートJPA SQL文
ここで私は混乱しています。私が期待しているようにこれを動作させるにはどうすればいいですか?おかげ
UserRepositoryインタフェース:
package cn.alittler.cms.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import cn.alittler.cms.domain.User;
public interface UserRepository extends JpaRepository<User, Long> {
}
テストクラス:
package cn.alittler.cms.domain;
import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import cn.alittler.cms.repository.UserRepository;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserTests {
@Autowired
UserRepository userRepository;
// three SQL statements: select、select and update. Why not two, the select and update SQL statements?
@Test
public void testUpdate() {
User user = userRepository.findOne(1L);
user.setName("Tom");
user.setCreateTime(new Date());
userRepository.save(user);
}
// Two SQL statements: select and update. Why not just one, the update SQL statement?
@Test
public void testUpdate2() {
User user = new User();
user.setId(2L);
user.setName("Tomi");
user.setCreateTime(new Date());
userRepository.save(user);
}
// Two SQL statements: select and delete. Why not just one, the delete SQL statement?
@Test
public void testDelete() {
userRepository.delete(2L);
}
}
最初の試験方法testUpdate()は、そこに3つのSQL文、なぜ2、選択があると更新しますか?
Hibernate:
select
user0_.id as id1_0_0_,
user0_.create_time as create_t2_0_0_,
user0_.name as name3_0_0_
from
alittler_cms_user user0_
where
user0_.id=?
Hibernate:
select
user0_.id as id1_0_0_,
user0_.create_time as create_t2_0_0_,
user0_.name as name3_0_0_
from
alittler_cms_user user0_
where
user0_.id=?
Hibernate:
update
alittler_cms_user
set
create_time=?,
name=?
where
id=?
第二の試験方法testUpdate2()、2つのSQLステートメント、なぜだけではなく
1、更新ステートメントがあるのですか?
Hibernate:
select
user0_.id as id1_0_0_,
user0_.create_time as create_t2_0_0_,
user0_.name as name3_0_0_
from
alittler_cms_user user0_
where
user0_.id=?
Hibernate:
update
alittler_cms_user
set
create_time=?,
name=?
where
id=?
最後のテスト方法testDelete()、2つのSQLステートメント、なぜ1つだけでなく、削除のSQL文もあるのですか?
Hibernate:
select
user0_.id as id1_0_0_,
user0_.create_time as create_t2_0_0_,
user0_.name as name3_0_0_
from
alittler_cms_user user0_
where
user0_.id=?
Hibernate:
delete
from
alittler_cms_user
where
id=?
ありがとう。
JPAを使用し、テストはトランザクションではないためです。削除のために、休止状態は、削除する必要があるエンティティと関係、したがって選択を知る必要があります。他のものは、idとmergeが行われたためです。つまり、dbとメモリの状態がマージされます(selectがdb状態を取得するために行われます)。その後、更新されます。 –