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

JPA 2个与实体具有相同类的不同本机查询

乜元魁
2023-03-14

我是JPA新手。目前,我正在编写一个带有注释的本机查询。我有一个类似下面的类

java prettyprint-override">@Column(name="field1")
Private String field1;

@Column(name="field2")
Private String field2;

@Column(name="field3")
Private String field3;

我正在编写两个查询,其中一个查询在选择投影中包含字段2,而另一个不包含字段2。如何对这两个查询使用相同的类?我尝试了瞬态注释。但它使两个查询的值都为null。

共有1个答案

谢俊力
2023-03-14

你有很多选择。

选项1:没有@Query的Spring Data JPA投影

interface MyProjection{
    String getField1();
    String getField3();
}
public interface MyRepository extends JpaRepository<Entity, Integer> {

    List<MyProjection> findAll();
}

选项2:来自带有@Query的Spring Data JPA的投影(与选项1非常相似)

interface MyProjection{
    String getField1();
    String getField3();
}
public interface MyRepository extends JpaRepository<Entity, Integer> {
    @Query("SELECT p FROM Entity p")
    List<MyProjection> customFindEntity();
}

选项3:Spring数据JPA的投影,带@Query,无任何接口

public interface MyRepository extends JpaRepository<Entity, Integer> {
    @Query("SELECT p.field1,  p.field2 FROM Entity p")
    List<Object> customFindEntity();
}

选项4:使用@Query从Spring数据JPA投影一个本地查询(与选项2非常类似)

interface MyProjection{
    String getField1();
    String getField3();
}
public interface MyRepository extends JpaRepository<Entity, Integer> {
    @Query("SELECT field1, field3 FROM Entity p", nativeQuery = true)
    List<MyProjection> customFindEntity();
}

选项5:使用对象数组的本机查询和返回列表

您必须从数组列表中提取数据。

public interface MyRepository extends JpaRepository<Entity, Integer> {
    @Query("SELECT field1, field3 FROM Entity p", nativeQuery = true)
    List<Object[]> customFindEntity();
}
 类似资料:
  • 我试图在我的实体中有两个相同域类的字段,但我得到了这个错误: org.hibernate.mappingException:无法确定表:Outhories中:com.packt.webapp.domain.user的类型,列:[org.hibernate.mapping.column(author)] 我只想将意见映射到已评论的用户,并将评论的作者存储在字段中。当我移除字段时,一切正常。这个例子有

  • 如何修复错误... 更新记录显示此错误时: 显示错误:{“附加“DomainClass.WorkshopReport”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到生成的数据库关键值。在这种情况下,请使

  • 让我快速描述一下我的问题。 我有5个客户的5个数据库,每个数据库都有一个名为SubnetSettings的表。 我已经创建了一个下拉列表来选择一个客户,并将显示属于所选客户的SubnetSSet表,并允许我创建、编辑和删除。 我可以毫无问题地创建、删除,但当我想编辑数据时,它会带来错误: /运输管理系统应用程序中的服务器错误。 附加“CFS”类型的实体。领域实体。SubnetSettings“失败

  • 错误消息:附加类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。 问题:我如何以类似于下面代码中AttachActivity方法所示的方式附加实体? 我必须假设上面错误消息的“另一个实体”部分指的是内存中存在但超出范围的对象(?)。我之所以注意到这一点,是因为我尝试附加的实体类型的DBSet的本地属性返回零。 我有理由相信实体不存在于上下文中,因为我遍历代码并在创建上下文时观察上下文。实

  • 我正在使用java。util。ServiceLoader创建轻量级插件框架。 我目前正在努力解决如何拥有多个具有相同FQN的实现类。我想在类路径上拥有同一个插件的两个副本,并且可以访问META-INF/services目录中给出的两个实现类。 以下是一些简单的eclipse项目,它们说明了我的意思:https://docs.google.com/open?id=0B4MxFm-ACB3IUmswN

  • 错误: 其他信息:附加“实体”类型的实体失败。客户”,因为另一个相同类型的实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则使用“附加”方法或将实体的状态设置为“未更改”或“修改”时可能会发生这种情况。这可能是因为某些实体是新的并且没有收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体来跟踪图,然后根据需要将非新实体的状态设置为“未更改”或“修改”。 我的代码: 我是这