我使用 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) 使用 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)