我有两张表需要连接在一起。
下面是我的模型课
@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
我在这里做错了吗?