2017-11-15 2 views
0

説明:クエリのマルチテーブルの列は、春のデータJPAに参加

私は2つのテーブル、Shop_EmployeeShop_Employee_Typeを持っています。従業員の詳細情報を表示するときにtypeNameを直接表示したいが、この2つのエンティティの間に関係(OneToManyまたはManyToOne)を設定したくない。
これはすべてのShop_Employee_Type列の値をロードするので、これらの値は私にとって無用です。typeNameShop_Employee_Typeの場合のみ必要です。 以下は私のコードですが、動作しません。

ShopEmployeeType:

@Entity 
@Data 
//@DynamicUpdate 
public class ShopEmployeeType { 
    @Id 
    private String typeId; 
    private String shopId; 
    private String typeName; 
    private Integer typeStatus; 
    private String typeDescription; 
} 

Shop_Employee:

@Entity 
@Data 
public class ShopEmployee { 

    @Id 
    private String employeeId; 
    private String shopId; 
    private String typeId; 
    private String name; 
    private String code; 
    private String phone; 
    private Integer status; 
    private String idcardNumber; 
    private String image; 
    //@Transient 
    private String typeName; 

    public ShopEmployee() { 
    } 
} 

レポジトリ:

@Query(value = "select u.*,t.type_name from shop_employee u inner join shop_employee_type t on u.type_id=t.type_id", nativeQuery = true) 
List<ShopEmployee> findAllData(); 

この私が望むようにtypeNameを表示することができましたが、新しいエンティティShop_Employeeを保存するとエラーが表示されます。 'typeName'に@Transientを追加すると正常に保存できますが、クエリのエンティティShop_Employeeを入力すると 'typeName'の値はnullになります。

答えて

0

2つのオブジェクトShop_EmployeeStringため、戻り結果がList<ShopEmployee>すべきではないを返す必要がありますあなたのクエリが、それは次のようになります。だから、

List<Object[]> list = findAllData(); 
for(Object[] obj : list){ 
    ShopEmployee shopEmployee = (ShopEmployee) obj[0]; 
    String type_name = (String) obj[1]; 
} 

@Query(value = "select u.*, t.type_name from shop_employee ...", nativeQuery = true) 
List<Object[]> findAllData(); 

は、その後、あなたが使用してShopEmployeeを得ることができます、ShopEmployeeエンティティでは、使用する必要はありません:

//@Transient 
//private String typeName;