Hibernate是怎么不通过set、get方法访问实体类的私有属性

Hibernate是怎么不通过set、get方法访问实体类的私有属性,第1张

public static void main(String[] args) {

    try {

        Test t = Test.class.newInstance()//通过class获得一个对象

        Field f = Test.class.getField("fname")//拿到字段对象

        f.setAccessible(true)//设置为可以访问,不设置的话,下一步访问会失败

        f.set(t, "value")//并进行赋值

        System.out.print(t.getFname())

    } catch (Exception e) {

        e.printStackTrace()

    }

}

static class Test {

    private String fname

    public String getFname() {

        return fname

    }

}

通过java的反射原理

你用的是hibernate4.1版本,在hibernate4.1之后,结构做了比较大的调整,抽象出了Service这个概念,所以,listener从以前的Configuration对象中被抽取了出来,变成了一个服务:EventListenerRegistry,所有的事件监听器都由这个服务产生,所以在hibernate4.1之后,你要注册监听器,要么还是在hibernate.cfg.xml里面配置,要么就在启动的时候:

ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(

config.getProperties()).buildServiceRegistry()

EventListenerRegistry listenerRegistry=sr.getService(EventListenerRegistry.class)

listenerRegistry.appendListeners(EventType.REMOVE, MyDeleteEvenetListener.class)

SessionFactory sf = config.buildSessionFactory(sr)

先得到EventListenerRegitry服务,然后注册自己的监听器。希望对你有用。

插入时先插入外键实体,然后用new出来的主键实体的add方法。set属性都会对应有add和del方法的。add之后save就能插入成功了。

你说的多余的属性,只要数据库没有设置成not null就可以不赋值。

hibernate在插入的时候会自动获取外键实体的主键,插入到表的对应字段。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11927789.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存