Java Spring Boot 2使用OneTONE映射的自定义查询

Java Spring Boot 2使用OneTONE映射的自定义查询,java,spring-boot,spring-boot-jpa,Java,Spring Boot,Spring Boot Jpa,我使用SpringBoot2和thymeleaf来显示来自现有Oracle 12数据库的数据 工作流实体是我希望显示的主要实体之一: @Entity @Immutable @Table(name = "V_AV_WFPROC", schema="avuser") public class Workflow { @Id @Column(name = "proc_id") private Long id; private String name; @Colu

我使用SpringBoot2和thymeleaf来显示来自现有Oracle 12数据库的数据

工作流实体是我希望显示的主要实体之一:

@Entity
@Immutable
@Table(name = "V_AV_WFPROC", schema="avuser")
public class Workflow {

    @Id
    @Column(name = "proc_id")
    private Long id;
    private String name;
    @Column(name = "proc_ref")
    private String procRef;
    private String description;
    @OneToOne(mappedBy = "workflow")
    private WorkflowCategory workflowCategory;

    public Long getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public String getProcRef() {
        return procRef;
    }
    public String getDescription() {
        return description;
    }

    public WorkflowCategory getWorkflowCategory() {
        return workflowCategory;
    }

}
workflowCategory
保存有关工作流的一些信息,如工作流类型:

@Entity
@Immutable
@Table(name = "V_AV_WFPROC_CATEGORIES", schema = "avuser")
public class WorkflowCategory {

    @Id
    @Column(name = "cat_id")
    private Long id;
    private String name;
    @OneToOne
    @JoinColumn(name="proc_id", referencedColumnName = "proc_id")
    private Workflow workflow;

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Workflow getWorkflow() {
        return workflow;
    }
我有一个工作流类别的自定义查询,因为只有一些信息对我很重要。我需要解码类别名称,因为我无法访问存储信息的表

@Repository
public interface WorkflowCategoryRepository extends CrudRepository<WorkflowCategory, String>{

    @Query(value = "SELECT PROC_ID || CAT_ID AS CAT_ID, PROC_ID, DECODE(CAT_ID, 4, 'Request Workflow', 5, 'Approval Workflow', 6, 'Escalation Workflow', 7, 'Fulfillment Workflow', 51, 'Custom Tasks Workflow', '?') AS NAME FROM WorkflowCategory WHERE CAT_ID IN (4, 5, 6, 7, 51)",
            nativeQuery = true)
    public Iterable<WorkflowCategory> findAll();

}

当我从查询中删除解码部分时也会发生这种情况。

您可以尝试使用@OneToOne注释上的以下属性吗

cascade=CascadeType.ALL和OrphanRemoving=true


然后我得到ORA-00904:“WORKFLOWCA0”.“NAME”:无效标识符
select WORKFLOWCA0.cat\u id为cat\u id1\u,WORKFLOWCA0.NAME为name2\u 11\u 1\u,WORKFLOWCA0.proc\u id为proc\u id3\u 11\u 1\u,workflow1\u.proc\u id为proc\u id1\u 10\u,workflow1\u.description为description为description为description2\u 10\u 10\u 0\u,WORKFLOWCA0,workflow1_u.proc_ref as proc_ref4_10_0_ufrom avuser.V_AV_WFPROC_ucategories workflowca0_u左外连接avuser.V_AV_WFPROC workflow1_0.proc_uid=workflow1_u.proc_uid,其中workflowca0_u.proc_uid=?
没有name属性,则出现与上述相同的错误。这意味着您正在查询表中不存在的内容。交叉检查列一次。是的,它仅在我在WorkflowCategoryRepository中创建的
@Query
中可用,而不在表中。有没有办法设置用于映射的自定义查询?我现在通过创建自定义视图解决了这个问题,但我想知道如何使用
@Query
进行映射。