枚举定义-
public enum someAccountType {
ACCOUNT_NUMBER("account_number"),
CREDIT_CARD("credit_card");
public final String v;
someAccountType(String value) {
this.v = value;
}
}
@AllArgsConstructor
@Getter
@Entity
@Builder
@Setter
public class SomeDetail {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Enumerated(EnumType.STRING)
@Column(name="accountType")
private Enum.someAccountType accountType;
..
}
存储库-
@Repository
public interface SomeDetailRepository extends JpaRepository<SomeDetail, Long> {
List<someDetail> findByEncryptedIfscAndEncryptedAccountNoAndAccountTypeAndIsValid(
String encryptedIfsc, String encryptedAccountNo, String accountType, Boolean isValid);
服务电话-
List<SomeDetail> someDetails = someDetailRepository.findByEncryptedIfscAndEncryptedAccountNoAndAccountTypeAndIsValid(
ben.getEncryptedIfsc(), ben.getEncryptedAccountNo(), Enum.someAccountType.CREDIT_CARD.v, isValid);
例外情况-
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [credit_card] did not match expected type [Enum$someAccountType (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [credit_card] did not match expected type [Enum$someAccountType (n/a)]
为什么它会抛出此异常?我已经定义了@Enumerated(EnumType.STRING),所以它应该期望存储在db中的字符串类型。
将Enum与JPA一起使用时,您需要依赖Enum对象,而不是它的属性。例如,我将像这样更改您的存储库方法:
@Repository
public interface SomeDetailRepository extends JpaRepository<SomeDetail, Long> {
List<someDetail> findByEncryptedIfscAndEncryptedAccountNoAndAccountTypeAndIsValid(
String encryptedIfsc, String encryptedAccountNo, Enum.someAccountType accountType, Boolean isValid);
并直接使用枚举val:
List<SomeDetail> someDetails = someDetailRepository.findByEncryptedIfscAndEncryptedAccountNoAndAccountTypeAndIsValid(
ben.getEncryptedIfsc(), ben.getEncryptedAccountNo(), Enum.someAccountType.CREDIT_CARD, isValid);
顺便说一句,在Java中,始终将您的类命名为enum。。。带大写字母的someAccountType-
@枚举
允许您指定Hibernate将如何将值存储在DB中。您有两个选项(来自javadoc):
但它不会改变您在存储库代码中使用它的方式,它只会改变Hibernate存储它的方式。
我能够存储、检索和查询具有枚举类型的实体(使用JPA/Hibernate)。枚举字段使用@Enumerated(EnumType.String)进行注释。 是否可以执行类似的操作? 谢谢你帮忙。 ---更新: 当我试图用这个来查询时:
问题内容: 假设有一个名为Type的简单枚举定义如下: 找到具有给定值的正确枚举通常是通过带for循环的静态方法(假设该方法在枚举内部定义)完成的,例如: 我认为用Stream API表示的功能等效如下: 我们怎么能写得更好,更简单?这段代码让人感觉很强迫,而且不太清楚。该特别是似乎笨重和滥用,因为它不累积什么,不进行计算,并始终直接返回(提供过滤器返回一个值- 如果不说的显然是个灾难),更何况是
假设有一个名为 Type 的简单枚举,定义如下: 为给定的<code>s</code>找到正确的枚举是用带有for循环的静态方法完成的(假设该方法在枚举中定义),例如: 我认为用Stream API表达的功能等价物是这样的: 我们怎样才能写得更好,更简单?这段代码感觉是被迫的,不是很清楚。尤其显得笨拙和滥用,因为它不积累任何东西,不执行任何计算,总是简单地返回(前提是过滤器返回一个值 - 如果它没
我想表达以下疑问 使用hibernate中的criteriabuilder。我没有成功,目前使用的是nativeQuery。 然而,问题的症结(我无法解决)似乎是我需要在子选择中返回两个属性。我找到的所有示例只返回一个属性。 这真的是jpa/hibernate的限制还是有办法做我想做的?任何帮助/指针都很感激。
我有一个实体,其类型由enum表示。数据库是Postgres,在那里表示为枚举类型。我使用JPA/Hibernate及其存储库。请注意,我是JPA、Hibernate和Kotlin的新手。 我试图创建自定义,我需要选择类型(枚举)在可能类型列表中的公司。我,但是,遇到各种错误类型铸造在SQL和/或语法的。 Kotlin中数据类