ormlite DataType.ENUM_STRING 给我“对于数据持久器无效”

发布于 2024-12-27 22:49:00 字数 748 浏览 2 评论 0原文

你好,我正在使用 ORMLite 4.33。

我有一个实体类,在尝试 destroyTable 时出现错误:

E/AndroidRuntime(6715): java.lang.IllegalArgumentException: Field class
     java.lang.String for field FieldType:name=udm,class=Prodotti is not valid
     for data persister com.j256.ormlite.field.types.EnumStringType@40a3a2e0

这是我运行 DatabaseConfigUtil 来更新 ormlite_config.txt 的类

@DatabaseTable(tableName = "Prodotti")
public class Prodotti extends BaseDaoEnabled{
    ....
    @DatabaseField(dataType = DataType.ENUM_STRING,
         columnDefinition="VARCHAR(100) DEFAULT NULL")
    //also tried @DatabaseField(dataType = DataType.ENUM_STRING)
    private String udm;
    ...
 }

,现在我认为唯一的解决方案是将字段的类型更改为 String

Hello i am using ORMLite 4.33.

I have an entity class that gives me an error when trying to destroyTable:

E/AndroidRuntime(6715): java.lang.IllegalArgumentException: Field class
     java.lang.String for field FieldType:name=udm,class=Prodotti is not valid
     for data persister com.j256.ormlite.field.types.EnumStringType@40a3a2e0

here is the class

@DatabaseTable(tableName = "Prodotti")
public class Prodotti extends BaseDaoEnabled{
    ....
    @DatabaseField(dataType = DataType.ENUM_STRING,
         columnDefinition="VARCHAR(100) DEFAULT NULL")
    //also tried @DatabaseField(dataType = DataType.ENUM_STRING)
    private String udm;
    ...
 }

I runned DatabaseConfigUtil to update the ormlite_config.txt, right now i'm thinking the only solution is to change the type of the field to String

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不知在何时 2025-01-03 22:49:00

ORMLite 不支持仅受几种数据库类型支持的数据库 SQL 枚举列。 ENUM_STRING 应该保留枚举类型。类似于:

 @DatabaseField
 private OurEnum udm;
 ...

 public enum OurEnum {
    RED, GREEN, BLUE;
 }

默认情况下,ORMLite 会将枚举保留为 VARCHAR SQL 字段中的字符串值(RED、GREEN、BLUE)。如果您有一个 String 字段,那么您应该将其保留为 STRING 类型。如果您想存储其值,也可以使用 DataType.ENUM_INTEGER,但出于向后兼容性的原因,不建议这样做。

如果您编辑问题以更好地解释您想要完成的任务,我可以编辑我的答案以提供更多信息。

ORMLite does not support database SQL enum columns which are only supported by a couple of database types. The ENUM_STRING is supposed to persist an enum type. Something like:

 @DatabaseField
 private OurEnum udm;
 ...

 public enum OurEnum {
    RED, GREEN, BLUE;
 }

By default, ORMLite will then persist the enum as it's string value (RED, GREEN, BLUE) in a VARCHAR SQL field. If you have a String field then you should just let it be persisted as a STRING type. You can also use the DataType.ENUM_INTEGER if you want to store its value instead but that is not recommended for backwards compatibility reasons.

If you edit your questions to better explain what you are trying to accomplish, I can edit my answer to provide more information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文