gpt4 book ai didi

java - Spring data Jpa 将具有某些不同字段的多个 SQL View 映射到单个实体中

转载 作者:行者123 更新时间:2023-12-01 20:25:40 25 4
gpt4 key购买 nike

我有三个 View ,它们返回几乎相似的字段(每个 View 中只有一个字段除外),并且我想为此 View 重用相同的实体。

@Entity
public class MyEntity {

@Id
@Column(name="id") private String id;
@Column(name="fieldA") private String fieldA;
@Column(name="fieldB") private String fieldC;
@Column(name="fieldC") private String fieldC;
}

我正在执行的 View

第一次查看:

select id, fieldA from myview;

第二个 View :

select id, fieldA, fieldB from myview2;

第三 View :

select id, fieldA, fieldC from myview3;

第一个存储库

@Repository
public interface View1Repository extends JpaRepository<MyEntity, String> {

@Query(nativeQuery=true)
MyEntity retrieveView1();

第二个存储库

@Repository
public interface View2Repository extends JpaRepository<MyEntity, String> {

@Query(nativeQuery=true)
MyEntity retrieveView2();

第三个存储库

@Repository
public interface View3Repository extends JpaRepository<MyEntity, String> {

@Query(nativeQuery=true)
MyEntity retrieveView3();

当我执行它时,它返回无效的列名称,因为它尝试映射所有字段,包括未返回的字段

有没有办法为这三个查询重用相同的实体..

PS。这些示例的 View 很短,实体有更多的字段

最佳答案

使用Projections

public interface EntityFieldA {
String getFieldA();
}


public interface EntityFieldAB {
String getFieldA();

String getFieldB();
}

public interface EntityFieldAC {
String getFieldA();

String getFieldC();

}

@Repository
public interface View1Repository extends JpaRepository<MyEntity, String> {

@Query("select new MyEntity (me.fieldA) from MyEntity ma")
EntityFieldA retrieveView1();

@Query("select new MyEntity (me.fieldA, me.fieldB) from MyEntity ma")
EntityFieldAB retrieveView2();

@Query("select new MyEntity (me.fieldA, me.fieldC) from MyEntity ma")
EntityFieldAC retrieveView3();
}

关于java - Spring data Jpa 将具有某些不同字段的多个 SQL View 映射到单个实体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com