Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JPA插入到另一个实体中_Java_Jpa - Fatal编程技术网

Java 使用JPA插入到另一个实体中

Java 使用JPA插入到另一个实体中,java,jpa,Java,Jpa,我想用JPA对这个查询执行一些语义相同的操作: 插入第二个表(第二个\u id、第二个\u名称、审核处、审核处) 选择first\u id、first\u name、audit\u cre\u at、audit\u cre\u from 从第一个表f开始 其中f.FIRST_VALID=1; 从FIRST_VALID=1的FIRST_表中删除; 在这些表格上: 先创建表\u表( 第一个\u ID原始(16)非空约束第一个\u PK主键, 名字VARCHAR2(2000年), 第一个有效数字(1

我想用JPA对这个查询执行一些语义相同的操作:

插入第二个表(第二个\u id、第二个\u名称、审核处、审核处)
选择first\u id、first\u name、audit\u cre\u at、audit\u cre\u from
从第一个表f开始
其中f.FIRST_VALID=1;
从FIRST_VALID=1的FIRST_表中删除;
在这些表格上:

先创建表\u表(
第一个\u ID原始(16)非空约束第一个\u PK主键,
名字VARCHAR2(2000年),
第一个有效数字(1)不为空,
在时间戳(0)处审核\u CRE\u默认当前\u时间戳不为空,
来自VARCHAR2(32)的审核凭证默认“系统”不为空,
约束二次有效检查(在(0,1)中二次有效)
);
创建第二个表(
第二个\u ID原始(16)非空约束第二个\u PK主键,
第二个名字VARCHAR2(2000年),
在时间戳(0)处审核\u CRE\u默认当前\u时间戳不为空,
来自VARCHAR2(32)的审核凭证默认“系统”不为空,
);
这是我的
FirstTable
实体:

@Entity
@Table(name = "FIRST_TABLE")
public class FirstTable{
    @Id
    @NotNull
    @Convert("UuidConverter")
    @Column(name = "FIRST_ID")
    private UUID id;

    @Column(name = "FIRST_NAME")
    private String name;

    @NotNull
    @Column(name = "FIRST_VALID")
    private int valid;

    @NotNull
    @Temporal(TIMESTAMP)
    @Column(name = "AUDIT_CRE_AT")
    private Date createdTime;

    @NotNull
    @Column(name = "AUDIT_CRE_FROM")
    private String creator;
}
@Entity
@Table(name = "SECOND_TABLE")
public class SecondTable{
    @Id
    @NotNull
    @Convert("UuidConverter")
    @Column(name = "SECOND_ID")
    private UUID id;

    @Column(name = "SECOND_NAME")
    private String name;

    @NotNull
    @Temporal(TIMESTAMP)
    @Column(name = "AUDIT_CRE_AT")
    private Date createdTime;

    @NotNull
    @Column(name = "AUDIT_CRE_FROM")
    private String creator;
}
这是我的
第二个表
实体:

@Entity
@Table(name = "FIRST_TABLE")
public class FirstTable{
    @Id
    @NotNull
    @Convert("UuidConverter")
    @Column(name = "FIRST_ID")
    private UUID id;

    @Column(name = "FIRST_NAME")
    private String name;

    @NotNull
    @Column(name = "FIRST_VALID")
    private int valid;

    @NotNull
    @Temporal(TIMESTAMP)
    @Column(name = "AUDIT_CRE_AT")
    private Date createdTime;

    @NotNull
    @Column(name = "AUDIT_CRE_FROM")
    private String creator;
}
@Entity
@Table(name = "SECOND_TABLE")
public class SecondTable{
    @Id
    @NotNull
    @Convert("UuidConverter")
    @Column(name = "SECOND_ID")
    private UUID id;

    @Column(name = "SECOND_NAME")
    private String name;

    @NotNull
    @Temporal(TIMESTAMP)
    @Column(name = "AUDIT_CRE_AT")
    private Date createdTime;

    @NotNull
    @Column(name = "AUDIT_CRE_FROM")
    private String creator;
}
我想在我的
FirstTable
实体中执行此操作。所以我想我必须设置一个
secondary表来访问它:

@Entity
@Table(name = "FIRST_TABLE")
@SecondaryTable(name = "SECOND_TABLE")
@NamedQuery(...)
public class FirstTable

我不想执行上面提到的查询,但我宁愿执行与JPA类似的操作(结果应该与查询相同)。我如何才能做到这一点?

JPA不支持这样做,只支持从第一个表中读取所有实体,然后为第二个表创建相应的实体


但是这将比SQL查询慢得多。

JPA不支持这样做,除了从第一个表中读取所有实体,然后为第二个表创建相应的实体


但是这将比SQL查询慢得多。

我认为不能使用命名查询进行插入。而且我认为在这些情况下使用JPQL或本机查询会更方便。只需通过多次调用JPA来执行代码:
EntityManager.persist()
EntityManager.delete()
和命名查询。您可以在JPA中执行任何SQL语句,但为什么您要发出INSERT语句,而JPA正是为您提供这些语句的……我的问题有点误导。我更正了它以澄清我的问题。JPA没有任何支持来做这件事,除了从第一个表中读取所有实体,然后为第二个表创建相应的实体。这显然比SQL查询慢得多。执行SQL查询有什么问题?我认为不能将命名查询用于insert。此外,我认为在这些情况下使用JPQL或本机查询会更方便。只需通过多次调用JPA来执行代码:
EntityManager.persist()
EntityManager.delete()
和命名查询。您可以在JPA中执行任何SQL语句,但为什么您要发出INSERT语句,而JPA正是为您提供这些语句的……我的问题有点误导。我更正了它以澄清我的问题。JPA没有任何支持来做这件事,除了从第一个表中读取所有实体,然后为第二个表创建相应的实体。这显然比SQL查询慢得多。执行SQL查询有什么问题?我认为不能将命名查询用于insert。此外,我认为在这些情况下使用JPQL或本机查询会更方便。只需通过多次调用JPA来执行代码:
EntityManager.persist()
EntityManager.delete()
和命名查询。您可以在JPA中执行任何SQL语句,但为什么您要发出INSERT语句,而JPA正是为您提供这些语句的……我的问题有点误导。我更正了它以澄清我的问题。JPA没有任何支持来做这件事,除了从第一个表中读取所有实体,然后为第二个表创建相应的实体。这显然比SQL查询慢得多。执行SQL查询有什么问题?