0

我有两张表需要连接在一起。

下面是我的模型课

@Data
@Entity
@Table(name="storetypecode")
public class StoreTypeCode implements IModel {

  @Id
  @EqualsAndHashCode.Exclude
  @GeneratedValue(strategy = GenerationType.AUTO)
  private UUID id;

  @Column(name="isenabled", nullable = false)
  private boolean isEnabled = false;

  @Column(name="displaysort", nullable = false)
  private Integer displaySort = 999;

  @Setter(AccessLevel.NONE)
  @OneToMany(fetch = FetchType.EAGER, mappedBy = "storeTypeCode")
  private Set<StoreTypeCodeTranslation> storeTypeCodeTranslationList = new HashSet<>();

  public StoreTypeCode(){
    // Do nothing
  }
}

@Data
@Entity
@Table(name="storetypecodetranslation")
public class StoreTypeCodeTranslation implements IModel {

  @Id
  @EqualsAndHashCode.Exclude
  @GeneratedValue(strategy = GenerationType.AUTO)
  private UUID id;

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

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

  @Column(name = "lang", nullable = false)
  private String lang="en";

  @Column(name="isdefault", nullable = false)
  private boolean isDefault=false;

  @ManyToOne
  @JsonIgnore
  @ToString.Exclude
  @EqualsAndHashCode.Exclude
  @JoinColumn(name = "storetypecode_id")
  private StoreTypeCode storeTypeCode;

  public StoreTypeCodeTranslation(){
    // Do nothing
  }
}

StoreTypeCodeTranslation 表充当 StoreTypeCode 的翻译。在 SQL 中,我将使用以下内容获取某种语言的 StoreTypeCode。

SELECT STC.id, STC.displaysort, STT.type1, STT.type2 
FROM storetypecode AS STC
LEFT JOIN storetypecodetranslation AS STT on STC.id = STT.storetypecode_id
WHERE STT.lang = 'en'
ORDER BY STC.displaysort ASC

如何使用 JPARepository 来获取上面 SQL 代码中所写的结果?此外,如果没有翻译的语言 StoreTypeCode,它应该返回结果为 'isDefault=true'。

我还是 JPARepository 的新手,并试图充分利用它的库。如果有人能指导我从哪里开始,将不胜感激。

谢谢

更新 ------------------------ 我有以下存储库设置。

public interface StoreTypeCodeRepository extends JpaRepository<StoreTypeCode, UUID> {

  @Query(
      value = "SELECT STC.id, STC.displaysort, STT.type1, STT.type2\n"
          + "FROM storetypecode AS STC\n"
          + "LEFT JOIN storetypecodetranslation AS STT on STC.id = STT.storetypecode_id\n"
          + "WHERE STT.lang = ?1\n"
          + "ORDER BY STC.displaysort ASC", nativeQuery = true)
  List<StoreTypeCodeResult> findByLanguage(String language);
}

我创建了 StoreTypeCodeResult 作为 DTO 类,如下所示

public class StoreTypeCodeResult {

  @Getter
  @Setter
  @Type(type="pg-uuid")
  private UUID id;
  @Getter
  @Setter
  private Integer displaySort = 999;
  @Getter
  @Setter
  private String type1;
  @Getter
  @Setter
  private String type2;

  public StoreTypeCodeResult(){

  }

}

当我运行代码时,我收到错误提示 No Dialect mapping for JDBC type: 1111; 嵌套异常是 org.hibernate.MappingException:没有 JDBC 类型的方言映射:1111

我在这里做错了吗?

4

0 回答 0