- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
出于某种原因,我无法通过 Id 找到现有实体
实体有以下 View :
@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 有以下 View :
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()
的情况下工作的问题?
最佳答案
几天前我刚刚遇到了同样的问题,然后我发现发生这种情况的原因是我正在检索的实体对另一个实体有外国引用,此后还有另一个外国对第三个实体的引用,这些 [references] 中的后者被配置为不可为 null,但问题是在检查数据库时,查找的项目在外键中实际上具有空值;因此,当持久性框架将服务转换为查询时,它进行了内部联接而不是外部联接,这从结果中删除了实体,因为第二个和第三个实体之间的联接由于空值而失败。
在第二个实体的字段中删除上述不可为 null 的子句解决了 [在检索第一个实体的服务中] 的问题
请检查您的实体是否未以类似方式映射:例如,我可以看到实体 Person 具有对实体 Owner 的外部引用,该实体 Owner 不可为空;也许所有者为空,这就是问题所在?如果它不为空,请检查所有其他外部引用,然后检查所有其他第三方实体的内部引用链,以确保您没有在相关列所在的这些字段之一中强制执行非空相反实际上可以为空。
关于java - Spring 数据 CrudRepository (hibernate) findone 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903120/
我正在阅读 JPA docs在 Spring ,我正在尝试重组我的代码。 我现在所拥有的: BrewerRepository @Repository public class BrewerReposi
我正在使用 Maven 开发一个 Spring Boot 项目(由 Spring Initializr 生成)。我想创建一个 CrudRepository,但我收到错误“CrudRepository
是否可以为 CrudRepository 添加默认排序方法?喜欢: interface PersonRepository extends CrudRepository { @SortDefaul
我创建了一个像这样的计划类 计划: @Entity(name = "Plan") @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHash
我有以下实体 请求对象 AdditionalReqObj。 两个实体均与 REQ_ID 链接表中的列(reqId 字段)。我正在使用Spring data CrudRepository interfa
我有两个实体客户和订单: @Entity public class Customer { @Id @GeneratedValue(strategy=GenerationType.IDENTIT
我的行为很奇怪。我创建了扩展 CrudRepository 的存储库。除保存方法外,所有默认方法都可以正常工作。它不会将新实体保存到数据库。我需要使用我提供的 id 保存新实体。如果我在数据库中提供现
我的域名和日期字段已更新,我想搜索 @Column(name = "updated") Date updated; 我有一个代表一天的 Java Date 对象,它由我的端点的 Controller
我有表格绑定(bind) @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "boundId", unique =
我使用 spring boot 1.2.5.RELEASE。我定义了一个扩展 CrudRepository 的接口(interface) public interface SampleEntitySe
我正在阅读有关 Crudrepository 的信息,它是针对特定类型的存储库进行通用 CRUD 操作的接口(interface)。 但我们可以创建自定义界面并扩展 CrudRepository。 我
我正在使用 Spring 并在其中 spring-data-jpa:1.7.0.RELEASE 和 hibernate-jpa-2.1-api:1.0.0.Final。我的数据库是MySQL。在集成测
我想显示一张人员表。用户应该能够发送查询并按大多数可选的属性进行过滤。 问题:对于每个要过滤的属性,我必须在 spring-data-jpa 中使用 `CrudRepository 引入一个额外的方法
我是 Spring 的新手。我的 GCGood 类使用 CrudRepository 保存到 MySQL-DB。而且效果很好。 现在我尝试编写 JUnit 测试。当然,我不希望任何测试数据出现在我的数
请原谅我犯的任何错误,因为这是我在这里的第一个问题。 我有一个包含两个表的数据库,其中一个表名为:PERSON 具有以下实体: @Entity class Person { @Id p
我有一个基本的 SpringBoot 应用程序。使用 Spring Initializer、JPA、嵌入式 Tomcat、Thymeleaf 模板引擎,并打包为可执行 JAR 文件。我创建了这个 Re
我想在我的 neo4j 数据库中存储一些数据。为此,我使用 spring-data-neo4j。 我的代码如下: for (int i = 0; i risk = new HashSet()
我使用 Angular、SpringBoot 和 MySQL 数据库构建了一个应用程序。它使用 CrudRepository 但我不明白它(一切正常)。 Controller /存储库如何知道从哪个表
我正在尝试获取对我的存储库接口(interface) (UserRepository) 的引用,该接口(interface)按顺序在我的自定义实现 (UserRepositoryExtensionIm
我有两个具有@ManyToOne 关系的实体类,如下所示。 @Entity public class Student { @Id private Integer studentId; @C
我是一名优秀的程序员,十分优秀!