使用 SINGLE_TABLE 继承策略运行条件时,“调用 getter of”时发生“IllegalArgumentException”

2024-03-05

我在尝试使用用简单限制装饰的休眠条件列出数据库中的对象时遇到此错误

Criteria criteria = session.createCriteria(Licence.class);
criteria.add(Restrictions.eq("gym", gym.getId()));
List<Licence> list = criteria.list();

我有两节课:Licence它有一个关联Gym。这两个类正在扩展DataModel用于管理有关数据版本的信息 - (创建和编辑、谁和何时)。同样重要的是,这两个类有@Inheritance(strategy = InheritanceType.SINGLE_TABLE).

Licence

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Licence extends DataModel implements Serializable {

    private Gym gym;
    private String licenceType;
    private String keyCode;
    private Date expireDate;
    private ELicenceExpiry expired;

    public Licence() {
    }

    @ManyToOne
    @JoinColumn(name="gym_id")
    public Gym getGym() {
        return gym;
    }

    public void setGym(Gym gym) {
        this.gym = gym;
    }

    @Column(name = "licence_type")
    public String getLicenceType() {
        return licenceType;
    }

    public void setLicenceType(String licenceType) {
        this.licenceType = licenceType;
    }

    @Column(name = "key_code")
    public String getKeyCode() {
        return keyCode;
    }

    public void setKeyCode(String keyCode) {
        this.keyCode = keyCode;
    }

    @Column(name = "expire_date")
    public Date getExpireDate() {
        return expireDate;
    }

    public void setExpireDate(Date expireDate) {
        this.expireDate = expireDate;
    }

    @Column(name = "expired")
    @Enumerated(EnumType.ORDINAL)
    public ELicenceExpiry getExpired() {
        return expired;
    }
    public void setExpired(ELicenceExpiry expired) {
        this.expired = expired;
    }
}

Gym

@Entity
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
public class Gym extends DataModel implements Serializable{

    private String shortName;
    private String name;
    private String nip; 
    private String street;
    private String postCode;
    private String localization;
    private String telephone;

    public Gym(){};

    @Column(name="short_name")
    public String getShortName() {
        return shortName;
    }
    public void setShortName(String shortName) {
        this.shortName = shortName;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNip() {
        return nip;
    }
    public void setNip(String nip) {
        this.nip = nip;
    }
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    @Column(name="post_code")
    public String getPostCode() {
        return postCode;
    }
    public void setPostCode(String postCode) {
        this.postCode = postCode;
    }
    public String getLocalization() {
        return localization;
    }
    public void setLocalization(String localization) {
        this.localization = localization;
    }
    public String getTelephone() {
        return telephone;
    }
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
}

数据模型

@MappedSuperclass
public abstract class DataModel implements Serializable{
    protected Long id;
    protected String editor;
    protected Date editDate;
    protected Time editTime;
    protected int dataState;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getEditor() {
        return editor;
    }
    public void setEditor(String editor) {
        this.editor = editor;
    }
    @Column(name="edit_date")
    public Date getEditDate() {
        return editDate;
    }
    public void setEditDate(Date editDate) {
         this.editDate = editDate;
    }
    @Column(name="edit_time")
    public Time getEditTime() {
        return editTime;
    }
    public void setEditTime(Time editTime) {
        this.editTime = editTime;
    }
    @Column(name="data_state")
    public int getDataState() {
         return dataState;
    }
    public void setDataState(int dataState) {
        this.dataState = dataState;
    }
 }

MySQL

CREATE TABLE licence(
    id INT(5) NOT NULL AUTO_INCREMENT,
    gym_id int(3),
    licence_type VARCHAR(10),
    key_code VARCHAR(10),
    expire_date DATE,
    expired INT(1),
    editor VARCHAR(10),
    edit_date DATE,
    edit_time TIME,
    data_state INT(1) NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (gym_id) REFERENCES gym(id) ON DELETE SET NULL
);

CREATE TABLE gym(
    id INT(3) NOT NULL AUTO_INCREMENT,
    short_name VARCHAR(16) NOT NULL UNIQUE,
    name VARCHAR(100) NOT NULL,
    street VARCHAR(100),
    post_code VARCHAR(6),
    localization VARCHAR(64),
    nip VARCHAR(13),
    telephone VARCHAR(15),
    editor VARCHAR(10),
    edit_date DATE,
    edit_time TIME,
    data_state INT(1) NOT NULL,
    PRIMARY KEY (id)
);

例外:

org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of pl.fitpartner.model.DataModel.id
    at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:192)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746)
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465)
(...)
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@37bd68c3
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169)
    ... 28 more

我做错了什么?


我发现问题出在哪里了。尽管休眠异常并没有提供太多信息,但答案确实微不足道。在给定条件的限制中,我必须更精确地说明我想在查询中引用哪个字段。 它应该看起来像这样:

Criteria criteria = session.createCriteria(Licence.class);
criteria.add(Restrictions.eq("gym.id", gym.getId()));
List<Licence> list = criteria.list();

更多解释可以看这个问题:Hibernate查询带有ID的外键字段 https://stackoverflow.com/questions/1787086/hibernate-query-a-foreign-key-field-with-id

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SINGLE_TABLE 继承策略运行条件时,“调用 getter of”时发生“IllegalArgumentException” 的相关文章

随机推荐

  • Drools-如何找出所有规则都匹配了?

    我有一个 DRL 文件 其中有 10 条规则 一旦我插入一个事实 一些规则可能会被匹配 我如何找出以编程方式匹配的规则 请注意 此答案对于 Drools 5 x 及以下版本有效 如果您已转到 6 或更高版本 请查看 melchoir55 修
  • 在 Dispatchertimer.Tick 事件中发送额外参数

    我的问题是如何在 Dispatchertimer Tick 事件中发送一些参数 这是代码 我想要的是在dispatcheTimer Tick处接收一个整数值 dispatcherTimer Tick new EventHandler dis
  • SQLITE_TRANSIENT 在 Swift 中未定义

    我正在使用 xcode 6 并且我已经导入libsqlite3 dylib and libsqlite3 0 dylib 我还添加了Bridging Header h文件女巫导入 sqlite3 h 我可以打开 SQLite 数据库并执行简
  • PHP:根据固定基准日期获取下一个日期

    PHP 有没有办法使用给定日期的 4 周间隔获取下一个日期 Example 我的开始日期是 2014 年 1 月 3 日星期五 我的间隔是从该日期起每 4 周一次 我正在寻找的是当前日期中与此 4 周间隔相匹配的下一个日期 或多个日期 如果
  • Google Maps API 和标记之间的自定义折线路线

    我想为 Android 应用程序创建一个自定义路由 我不确定应该使用哪个 API 以及它是否与 Java 兼容 据我所知 我需要使用航点来制定路线 我不需要知道两点之间的距离 只需制定路线 目标是从地图一侧的菜单中选择一个选项 并显示两个标
  • 多层架构中,是否可以跳过业务层进行增删改查操作?

    我们有 3 层应用程序 其中来自服务层的每个调用都进入业务层并由数据层保存 每层组件只能调用下面的层 然而 由于我们有数百个实体 并且有很多与 CRUD 操作相关的服务 因此我们的团队引发了很多争议 有些人认为 为了维护和易于开发 最好从
  • 设备部署是否足以模拟应用程序更新?

    通过应用程序商店 由 lambda 用户在设备上 进行的应用程序更新过程没有很好的记录 我将所有这些总结为以下问题 当用户更新他的应用程序时会发生什么 是所有内容都被删除 还是只是应用程序的某些部分 那么什么是保留的 什么是不保留的 如何在
  • 大规模互联网应用,从何入手?

    我正在从事的工作 我认为有关大规模应用程序 大规模网络的知识会对我有很大帮助 你认为我应该采取什么 我的意思是要读的书 要参加的课程 等等 预先感谢您的任何建议 PS 也许我的意思是应用程序不够大 D 一种适用于 gt 10 万用户的社交网
  • 如何在 spring 中配置自动装配

    如何在 spring 中配置自动装配 将上下文架构添加到配置 XML 并使用 Autowired 注释 http static springsource org spring docs 2 5 x reference beans html
  • vi 加密:使用了什么算法?

    我多年来一直使用加密文件来存储我的密码 它已使用加密vi xSun Solaris 10 上的命令 我现在尝试使用以下命令在 Linux 机器上打开该文件vi x and vi x cm blowfish 可悲的是 该文件完全混乱了 我的猜
  • C++ getline 使用逗号作为分隔符的多个变量类型

    我正在尝试做一个家庭作业 需要将 txt 文件中的数据读入变量中 该文件的每一行都有 姓氏 姓名缩写 号码 号码 我已经使用以下代码使 get 线部分工作 ifstream inputFile Students txt string lin
  • laravel 使用 php artisan 时从自定义存根创建模型

    当我使用php artisan make model CustomNamespace TestModel 我得到一个基于默认存根的模型 如下所示 namespace App Models CustomNamespace use Illumi
  • 在WKWebView中使用自定义字体

    我在我的应用程序中使用自定义字体 它们被复制到捆绑包并硬编码到 appName info plist 这种字体在整个应用程序和 UIWebView 中完美运行 我正在加载 htmlString webView loadHTMLString
  • 为什么模板类型参数不被推断为“const”? [复制]

    这个问题在这里已经有答案了 可能的重复 从右值参数推导对 const 的引用 https stackoverflow com questions 6075093 deducing references to const from rvalu
  • 如何以编程方式设置我的 IP 地址?

    如何以编程方式设置我的 IP 地址 我的应用程序正在检查它 使用代码德尔福技巧 http www delphitricks com source code internet get your own ip address html 虽然我不
  • 在 Jquery Mobile 或 PhoneGap 中禁用自动旋转

    虽然移动设备的跨平台开发这么好 没有一个简单的选项可以禁用自动旋转或锁定到一个方向 即纵向或横向 Jquery Mobile PhoneGap XUI 中是否有任何地方 如果是的话请帮忙 这让我发疯 来完成上面的回答 在 iPhone 上
  • Spring security默认配置总是抛出401

    我正在使用一些基本服务和实体创建一个新的 Spring REST 应用程序 我添加了 Spring Security 并且没有覆盖任何类 我只是向 application properties 添加了用户和密码 到目前为止一切顺利 我打开
  • 使用 HttpURLConnection 将调用正文添加到 POST

    我正在尝试使用 HTTPURLConnection 对服务器 api 进行 POST 方法调用 我的通话正文的 JSON 版本是 grant type password username email protected cdn cgi l
  • Node.js:http.js:691 抛出新错误('发送后无法设置标头。')

    您好 我正在使用 MEAN 堆栈制作简单的应用程序 我收到此错误 http js 691 throw new Error 发送后无法设置标头 这是代码 服务器 js set up var express require express va
  • 使用 SINGLE_TABLE 继承策略运行条件时,“调用 getter of”时发生“IllegalArgumentException”

    我在尝试使用用简单限制装饰的休眠条件列出数据库中的对象时遇到此错误 Criteria criteria session createCriteria Licence class criteria add Restrictions eq gy