当前位置: 首页 > 知识库问答 >
问题:

CrudRepository,不能使用IdClass保存具有复合主键的实体

鲁昕
2023-03-14

我有以下实体:

@Entity
@Data
@IdClass(ProjectEmployeeId.class)
public class ProjectEmployee {

  @Id
  @ManyToOne
  private Project project;

  @Id
  @ManyToOne
  private Employee employee;

  @ManyToOne
  private ProjectEmployeeRole projectEmployeeRole;
}
@Data
public class ProjectEmployeeId implements Serializable {
  private Project project;

  private Employee employee;
}
public interface ProjectEmployeeRepository
        extends CrudRepository<ProjectEmployee, ProjectEmployeeId> {
}
projectEmployeeRepository.save(projectEmployee);
Resolved [org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.Long' to required type 'de.employee.Employee' for property 'employee'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.Long' to required type 'de.employee.Employee' for property 'employee': no matching editors or conversion strategy found]

我第一次使用复合主键,所以我不知道它应该如何工作。问题可能来自定义crudrepository 。第二个参数应该表示ID。但是ProjetEmployee没有一个主键,而是有两个主键,所以我认为我应该将id类添加到id参数中,但这不起作用。如何使用带有CrudRepository的IdClass键保存具有复合主实体?

共有1个答案

姚煜
2023-03-14

您的存储库希望ProjectEmployeeId具有长数据类型的id。您在代码中使用private EmployeeId和EmployeEmployeEmployeEmployeId对象,

您的复合主系统应该包括来自员工和项目的ID,而不是整个实体。在本例中,考虑使用@Embeddable和@EmbeddedID注释而不是@IDClass。

 类似资料:
  • 我有两个具有@ManyToOne关系的实体类,如下所示。 我是Spring Data JPA的新手,所以这可能是一个非常基本的错误。

  • 我在使用复合主键创建实体时遇到问题,该键也是外键。这是我的表和关系表原理图。当我想创建新闻实体时,我收到了带有null creatingnews的错误消息。新闻翻译有复合主键,外键引用到新闻表。 这是我的代码: 新闻聚合 新闻翻译 标签 新闻语言ID 在NewsFactory中,我希望使用NewsTranslation创建NewsAggregate,但有错误消息NullPointer。 新闻工厂

  • 花了3天时间寻找解决方案,最后我来到这里寻求社区智慧。 我有如下的自我引用实体: 我通过手动运行它来确保请求不会返回数据库中的任何内容,但发现如果我将更改为,它将返回数据,因此,块中可能存在错误

  • 我们想用雄辩的ORM和Laravel 5实现复合主键http://www.mbarendezvous.com/ 据我所知,它目前还没有得到雄辩者的支持。请建议最好的替代方案。

  • 我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar

  • 我使用spring boot 2,我的一些实体有复合键 当我尝试保存一个实体时,我会得到这个错误 无法转换请求元素:org.springframework.beans.conversionNotSupportedException:无法将类型“java.lang.integer”的属性值转换为属性“samping”所需的类型“com.lcm.model.samplingspk”;嵌套异常为java