小编Ale*_*lex的帖子

Spring JPA Hibernate 查询缓存不起作用

我使用 Spring Boot 1.4.1 和 spring-boot-starter-data-jpa

当查询我的自定义方法时,如 'findByName(String name)' 它不是缓存。

但是当查询像 'findOne(Interger id)' 这样的默认方法时,它就起作用了。

应用程序属性:

spring.jpa.properties.hibernate.cache.use_query_cache=true
Run Code Online (Sandbox Code Playgroud)

存储库:

@Repository
public interface AuthorRepository extends CrudRepository<Author, Integer> {
    Author findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

测试:

public class RepositoryTests {
    @Autowired
    private AuthorRepository authorRepository;

    @Test
    @Transactional
    public void test() {
        authorRepository.save(new Author("admin"));

        // ***Not work. query **5** times.
        Author author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");

        // ***It's work. query **1** times.
        Author author = authorRepository.findOne(1);
        author = …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-data-jpa

5
推荐指数
1
解决办法
1977
查看次数

Spring Data JPA Hibernate 多对多级联删除

使用 Spring Boot 1.4.0 和 MySql 5.7

我有两个表,它是单向@ManyToMany,但是角色中的父端,我想删除权限,hibernate会自动删除它自身和链接表记录:

  • 允许

    @Entity
    public class Permission {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @Column(unique = true)
        private String name;
    
        //...Getter and Setter
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 角色

    @Entity
    public class Role {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @Column(unique = true)
        private String name;
    
        @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        private final Collection<Permission> allowedPermissions = new ArrayList<>();
    
        //...Getter and Setter
    }
    
    Run Code Online (Sandbox Code Playgroud)

但是当尝试删除权限记录时。错误告诉我“无法删除或更新父行:外键约束失败”。

我在角色中设置了级联= CascadeType.ALL。

如何修复它?

我想当删除权限时,链接表将删除该权限的所有链接。

错误信息:

org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-data-jpa

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

hibernate ×2

spring-data-jpa ×2