问题标签 [hibernate-annotations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - hibernate复合主键包含复合外键,如何映射这个
我在那里搜索,并没有找到任何类似的主题,所以我发布了一个新问题。
我正在使用 Hibernate 处理现有数据库。我们不允许更改表结构和数据。应用程序正在从数据库中读取数据并基于某些逻辑迁移到另一个数据存储区。
现在的问题是关于复合 PK 映射。例如
表 A 有一个复合 PK。
表B也有一个复合PK,这个复合PK的一部分是A的PK,这里也是FK。
我尝试了几种方法,但都没有奏效。谁能告诉一个有效的 Hibernate 映射解决方案?注释风格更好。
hibernate - 是否可以使用 Hibernate 注释和 hbm2ddl 在连接表上创建索引?
我在多对多关联中有两个实体。如果 hbm2ddl 被激活,Hibernate 会为此关联创建一个连接表。但是,由于我没有此表的实体,因此无法应用 @Index 注释。有没有办法告诉休眠 hbm2ddl 在连接表上生成索引和主键?
hibernate - Hibernate Annotation + AspectJ -> 属性在 HQL 中命名 pbs
我正在寻找一种使用方面在休眠注释类中注入参数的方法。
这是一个用户:
这是对该用户有贡献的一个方面
现在我想提出一个要求:
如果我这样做:
“来自用户”我没有像 result.getCityName() 这样的问题。
如果我执行“来自 cityName = 的用户?” 它不起作用...
这是由于方面波动。不是将我的私有字符串 cityName 关联到休眠中的“cityName”,而是将其关联到不可用的类型名称:类似于 class$ajc$intertype$interface$cityName。
你有办法解决这个问题吗?更改 hql 属性名称关联?
非常感谢 !
java - JPA/Hibernate DDL 生成;CHAR 与 VARCHAR
我有一个 JPA/Hibernate 数据模型,我正在使用 Hibernate hbm2ddl 工具生成数据库 DDL。我在数据库中有一些应该是 CHAR 的字符串和一些可能是 VARCHAR 的字符串。我想尽量减少对 DDL 的手动编辑(我意识到有些必须发生)。
有人知道我应该怎么做吗?我意识到我可以通过黑客方言制作所有字符串 VARCHARS 或 CHARS,但这在数据库中并不总是合适的。
我希望能够使用注释或 aop 来做到这一点,避免在我的类中自定义列定义文本。
谢谢。
hibernate - 如何在带有注释的休眠中以编程方式验证数据库模式?
似乎 org.hibernate.cfg.Configuration 对象可用于通过调用 validateSchema 方法以编程方式执行验证。但是,此方法需要 dialect 和 databaseMetadata 对象。我正在使用 Spring,我可以从 Spring 上下文中获取 AnnotationSessionFactoryBean 对象。到目前为止,我有以下代码:
我在正确的轨道上吗?ConnectionHelper 层次结构在包外不可见,因此我无法以这种方式获取连接对象,以构造 databaseMetadata。我该如何实施?
编辑:我想我已经取得了一些进展。有一个 SchemaValidator 类。代码现在如下所示:
但是,现在我收到以下错误:
org.hibernate.HibernateException:找不到用于配置的本地数据源 - 必须在 LocalSessionFactoryBean 上设置“数据源”属性
java - 存在于 1 个以上目录中的实体的休眠注释
我有一个由 Hibernate 映射到数据库目录“活动”中的数据库表的 Person 实体。一段时间后,“活动”目录中此数据库表中的记录被存档/移动到数据库目录“历史”中表的精确副本。我需要从活动目录和历史目录中检索。有没有更好的方法来使用 Hibernate 注释进行建模,而不是创建一个扩展 2 个类的抽象类。
这就是我现在所拥有的。
java - 休眠映射 - “无法确定类型”
我目前有以下对象成功持久化:
- 人名等
- 考试名称、日期等
我现在想创建第三张表Exam results。对于这张表,我认为应该是人员 ID、考试 ID 和结果,这是多对多的关系。
错误:
org.hibernate.MappingException:无法确定类型:人员,在表:ExamResult,列:[org.hibernate.mapping.Column(person)]
我想我可能会以错误的方式解决这个问题,但我无法从 教程中弄清楚如何处理这种关系。
有任何想法吗?
java - 休眠中的可变长度Blob?
我的一个持久类中有一个 byte[] 成员。通常,我只是用@Lob 和@Column(name="foo", size=) 对其进行注释。然而,在这种特殊情况下,byte[] 的长度可以变化很大(从 ~10KB 一直到 ~100MB)。
如果我用 128MB 的大小来注释列,我觉得我会为中小型对象浪费大量空间。我可以使用可变长度的 blob 类型吗?hibernate 会在不浪费空间的情况下在幕后为我处理所有这些吗?解决这个问题的最佳方法是什么?
谢谢!
java - 在休眠的旧系统中使用复合键连接表
我目前正在尝试创建一对 Hibernate 带注释的类,以从旧系统中的一对表中加载(只读)。遗留系统使用一致(如果有些过时)的方法来键入表。我试图映射的表如下:
我通过创建这样的 CustomerAddress 类来解决这个问题:
CustomerAddressKey 类是具有两个关键字段的简单可序列化对象。然后将 Customer 对象定义为:
所以,我的问题是:如何在 Customer 表上表达 OneToMany 关系?
java - 休眠映射中2级继承的问题
这是我的班级结构:
这是我的映射(为简洁起见省略了类主体):
A类:
B类:
C类:
D类:
E类:
我有一个包含一组 A 的 F 类:
问题是,每当我将一个新的 E 实例添加到 aSet 然后调用session.saveOrUpdate(fInstance)
时,hibernate 都会使用“A”作为鉴别符字符串进行保存。当我尝试访问 F 实例中的 aSet 时,出现以下异常(为简洁起见,省略了完整的堆栈跟踪):
我是否错误地映射了类?我应该如何映射多个继承级别?
谢谢您的帮助!