【发布时间】:2018-02-04 18:52:00
【问题描述】:
由于某种原因,我无法通过 Id 找到现有实体
实体有以下视图:
@Entity
@Table(name = "persons")
@NamedEntityGraph(name = "includeRemunerationAndCredential",attributeNodes = {
@NamedAttributeNode("remunerations"),
@NamedAttributeNode("credentials")
})
@JsonSerialize
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "first_name", nullable = false, length = 50)
@NotNull
private String firstName;
@Column(name= "second_name", nullable = false, length = 50)
@NotNull
private String secondName;
@Column(name = "father_name", length = 50)
private String fatherName;
@Column(name = "phone_number", length = 20)
private String phoneNumber;
@Column(name = "date_of_birth")
private LocalDateTime dateOfBirth;
@Column(name = "role", nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private Role role;
@Column(name = "date_of_creation", nullable = false)
@NotNull
private LocalDateTime dateOfCreation;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "carwash")
private CarWash carWash;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "person")
private List<Remuneration> remunerations;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "person")
private Set<Credential> credentials;
@Column(name = "enable", nullable = false)
private Boolean enable;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "owner", nullable = false)
private Owner owner;
// getters and setters
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return id != null ? id.equals(person.id) : person.id == null;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", secondName='" + secondName + '\'' +
", fatherName='" + fatherName + '\'' +
", phoneNumber='" + phoneNumber + '\'' +
", dateOfBirth=" + dateOfBirth +
", role=" + role +
", dateOfCreation=" + dateOfCreation +
", carWash=" + (carWash == null ? carWash : carWash.getId()) +
", remunerations=" + (remunerations == null ? remunerations : remunerations.size()) +
", enable=" + enable +
", owner=" + (owner == null ? "N/A" : owner.getName()) +
'}';
}
我的DAO如下视图:
public interface PersonDAO extends CrudRepository<Person, Long> {}
我的服务是由这个班级提供的
@Service("userDetailsService")
@Transactional
public class MyUserDetailService implements UserDetailsService {
@Autowired
PersonDAO personDAO;
@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
//final Iterable<Person> all = personDAO.findAll();
final Person one = personDAO.findOne(15L);
return null;
}
因此,如果在服务中 personDAO.findAll() 填充被注释,则 personDAO.findOne(15L) 返回 null 但如果 findAll() 将未提交,则将找到 findOne(15L)。热修复这个 findOne 在没有 findAll() 的情况下工作?
【问题讨论】:
-
你为什么返回null?
-
显然,持久化的 id 不是 15。证明这一点 - 显示您的数据库。
-
我返回 null 只是为了减小方法大小。无论如何它对弹簧数据没有任何反应
-
数据如何进入数据库?它已经存在了吗?还是被其他代码插入?如果稍后向我们展示该代码。
-
听起来 findAll 可能会触发刷新。
标签: java hibernate spring-data