Tag: orm

HQL:使用ManyToMany进行Hibernate查询

我有一个关于HQL查询和hibernate的问题。 我有一个用户类和一个角色类。 用户可以拥有许多角色。 所以我有一个像这样的ManyToMany版本: 在用户类中: @ManyToMany(fetch = FetchType.LAZY) @oinTable(name = “PORTAIL_USERROLE”, joinColumns = { @JoinColumn(name = “USERID”, nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = “ROLE”, nullable = false, updatable = false) }) public Set getPortailroles() { return this.portailroles; } 在角色类中: @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = “PORTAIL_USERROLE”, joinColumns = { @JoinColumn(name […]

Java Hibernate / C3P0错误:“无法获取连接元数据。 客户端尝试签出连接的尝试已经超时。“

我正在尝试获取一些我已经通过并运行的代码。 它似乎使用Hibernate框架。 我已经完成了调整配置的大部分错误,但这个让我感到难过。 它试图连接到两个数据库:gameapp和gamelog。 两者都存在。 它似乎有连接到游戏日志的问题,但没有连接到gameapp(后来在init中,它连接并加载其他DB就好了)。 下面,我已经粘贴了错误和exception堆栈转储。 我在configs中成像了其他东西,所以我还包括了该db的配置文件。 我知道这很模糊,但我希望有些职业选手可以看到我错过的愚蠢错误。 org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/gamelog root true UTF-8 100 1 none true true org.hibernate.connection.C3P0ConnectionProvider 5 10 30 30 0 5 exception和堆栈跟踪: 2010-04-30 17:50:00,411 WARN [org.hibernate.cfg.SettingsFactory] – Could not obtain connection metadata java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) […]

用于监视Hibernate缓存使用情况的工具

是否有任何工具可以监控Hibernate二级缓存的使用? 我知道我可以使用Hibernate API来检索这些信息。 但是当我的应用程序没有读取信息本身时,我该怎么办?我无法修改它? 有没有办法从应用程序外部读取缓存统计信息?

无法在一对多关系hibernate注释中插入null

我有一个A类{Set b …..},它将B类的引用保存为Set。 这是一对多的关系。 这两个类在oracle中都有音序器。 我把cascade放在hibernate注释中。 当我保存类A时,它给出了我无法插入null B.a_id的错误。 A-id在我的数据库中不可为空。 我怎么能坚持这种关系。

使用JPA / ORM生成db模式是个坏主意吗?

药膏! 关于SO的另一个问题/答案的一部分 (以及声称相同的其他陈述): 如果您通过JPA更新数据库模式(通常不是一个好习惯) 您是否应该使用JPA实现来生成数据库模式? 无论如何,我必须自己模拟实体和关系。 我需要定义约束,如notnull,主键和外键,数据类型和大小。 假设正在使用的JPA实现在其DDL模式创建代码中没有任何缺陷,并且假设我确实正确地指定了所有JPA约束,关系等,那么由JPA实现创建的db模式应该完全相同 – 如果不是更好 – 作为我自己手工制作的架构,对吧? 这不包括“特殊情况”,例如(业务逻辑)特定的INSERT触发器等,因为这些根本不能由JPA实现生成(据我所知,如果我错了,请纠正我)。 你对此有何看法? 我现在首先手工编写我的数据库模式,然后设置JPA约束,关系等,让JPA实现也创建一个数据库模式。 然后我比较两个模式,看看我是否正确完成了设置。 这当然意味着我还必须指定与我手工模式相同的列名等。 使我的问题更加准确; 我并不盲目信任ORM框架来为我生成架构。 我宁愿知道模式在我的脑海中如何看待,然后配置框架以匹配它。 我想你只能手工创建更多/最有效的架构,但毕竟我需要(或者更愿意)将它们与ORM框架一起使用。 因此,虽然我不应该这样做,但是在创建数据库模式时,我需要牢记ORM框架的局限性。 因此,我使用ORM框架以便不必关心RDBMS细节,让我的应用程序使用特定于RDBMS的DDL创建模式的重点是什么? 如果我必须使用一些现有的和异乎寻常的模式,我不需要(重新)创建模式,以及我可能无法使用这样的通用工具作为ORM框架。

在persistence.xml之外定义jpa实体类

有没有办法在persistence.xml之外定义jpa实体类(即在单独的文件中)? 能够将persistence.xml作为外部文件也足够了。 先谢谢,史蒂文 编辑:对不起,我不清楚。 这是在Java SE环境中。 另外,我想在persistence.xml文件中没有some.class.AClass的列表。 这是因为我想动态创建这个类列表并引用包含该列表的文件。 Edit2:通过在打包之前在构建时编写persistence.xml文件来管理解决此问题。 如果有人感兴趣,我使用scannotations来发现所有使用@Entity注释的类,并将它们写入target / classes / META-INF中的persistence.xml文件(使用maven)。

将Select语句放在Hibernate事务上

我已经阅读了一段时间关于Hibernate,但我似乎无法理解有关Transaction一个概念。 在我访问过的某些网站上, Select语句处于交易模式。 public List readAll() { Session session = HibernateUtil.getSessionFactory() .getCurrentSession(); session.beginTransaction(); List booksList = session.createQuery(“from Book”).list(); session.getTransaction().commit(); return booksList; } 在某些网站上,它并不主张在Select语句中使用事务: public List readAll() { Session session = HibernateUtil.getSessionFactory() .getCurrentSession(); List booksList = session.createQuery(“from Book”).list(); return booksList; } 我在想我应该遵循哪一个。 Select陈述是否需要交易?

复制一组实体并在Hibernate / JPA中保留

我想在我的数据库中复制一组实体。 我用以下方式检索了这个系列: CategoryHistory chNew = new CategoryHistory(); CategoryHistory chLast = (CategoryHistory)em.createQuery(“SELECT ch from CategoryHistory ch WHERE ch.date = MAX(date)”).getSingleResult; List categories = chLast.getCategories(); chNew.addCategories(categories)// Should be a copy of the categories: OneToMany 现在我想复制一个’类别’列表并用EntityManager保存它。 我正在使用JPA / Hibernate。 UPDATE 在知道如何分离我的实体之后,我需要知道要分离的内容:当前代码: CategoryHistory chLast = (CategoryHistory)em.createQuery(“SELECT ch from CategoryHistory ch WHERE ch.date=(SELECT MAX(date) from CategoryHistory)”).getSingleResult(); Set categories =chLast.getCategories(); //detach […]

我们如何在Grails中迁移/更新数据库模式?

我们已经与Grails合作了一段时间,我的团队负责人提出了一些关于Grails ORM(GORM)的问题: 一旦我们转向生产,我们如何维护数据库架构? 我们可以用Grails更新数据库架构吗? 如果架构已更新,是否会自动反映更改/框架是否会处理此问题? 是否有任何Grails插件可以让我们更新架构而不会头疼?

在Hibernate中使用lazy作为属性

hibernate中属性标记的lazy属性允许根据链接懒惰地加载属性: http : //docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration -属性 lazy(可选 – 默认为false):指定在首次访问实例变量时应该懒惰地获取此属性。 它需要构建时字节码检测。 但是,当我尝试为我的一个属性设置lazy = true时,它不会在此示例中懒惰地加载它: Hibernate映射文件: 程序: public static void main(String[] args) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event event = (Event) session.get(Event.class, 135L); session.getTransaction().commit(); System.out.println(event); HibernateUtil.getSessionFactory().close(); } 由hibernate生成的查询: Hibernate: select event0_.EVENT_ID as EVENT1_0_0_, event0_.EVENT_DATE as EVENT2_0_0_, event0_.title as title0_0_ from EVENTS event0_ where event0_.EVENT_ID=? 请帮助我理解懒惰在这种情况下为什么不起作用?