`

@JoinColumn 匹配关联多个字段

 
阅读更多
两张表结构如下
TABLE_A:
ID, COLA1, COLA2
 
TABLE_B:
ID, A_ID, COLB1, COLB2
 
A和B是一对多的关系。
我在B的BEAN上面,通过Anotation建立如下关系。
@ManyToOne(cascade = CascadeType.REFRESH, targetEntity = TABLE_A.class)
@JoinColumnsOrFormulas(value={@JoinColumnOrFormula(column=@JoinColumn(name = "A_ID", referencedColumnName = "ID", nullable = true, insertable = false, updatable = false))
                 ,@JoinColumnOrFormula(formula=@JoinFormula(value="'ABC'", referencedColumnName = "COLB1"))
                        })
 
 
现在的问题来了,就是在 TABLE_B.A_ID = TABLE_A.ID同时,还要求TABLE_B.COLB1="ABC"。

 

解决办法如下:

@ManyToOne(cascade = CascadeType.REFRESH, targetEntity = TABLE_A.class)

@JoinColumnsOrFormulas(value={

@JoinColumnOrFormula(column=@JoinColumn(name ="A_ID", referencedColumnName ="ID", nullable = true, insertable =false, updatable = false)) ,@JoinColumnOrFormula(formula=@JoinFormula(value="'ABC'", referencedColumnName = "COLB1"))  

})



 

重点就是@JoinFormula的使用(和@JoinColumn类似):

value指明对应列的值(这里也可以写SQL表达式),

referencedColumnName指明列的名称

由于关联关系多于一个,所以,需要使用@JoinColumnsOrFormulas、@JoinColumns、@JoinrFormulas这样的标签,将多个条件包括进来。

 

参考:http://www.oschina.net/question/54953_45536

 

分享到:
评论

相关推荐

    Hibernate多表关联配置及错误解决方法

    多对一关联表示一个实体可以与多个另一个实体相关联。例如,`Order`类可能有多个`Product`,配置如下: ```java @Entity @Table(name="Order") public class Order { @ManyToOne @JoinColumn(name="product_id") ...

    hibernate关联关系实例

    多对多关联关系表示两个实体之间可能存在多个匹配项。这通常通过中间表(Junction Table)实现,使用`@ManyToMany`和`@JoinTable`注解。例如: ```java @Entity public class Student { @ManyToMany @Join...

    13_JPA详解_JPA中的多对多双向关联实体定义与注解设置.zip

    在关系数据库中,多对多关联意味着两个表之间存在多个匹配项,每个表的记录都可以与对方表的多个记录相关联。在JPA中,这种关联通常通过中间表(或称为联接表)来实现,这个中间表包含两个表的外键。 接下来,我们...

    Hibernate 多对多关联

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是一种常见的数据库关系映射,它允许一个实体类中的多个实例与另一个实体类的多个实例相互关联。在这个场景下,"Hibernate 多对多关联"的问题可能是由于...

    hibernate多对多单向关联

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是一种常见的关系映射类型,它用于表示两个实体之间可以有多个匹配项的情况。例如,学生和课程之间的关系,一个学生可以选修多门课程,一门课程也可以被...

    Hibernate ORM - 多对多双向中间实体关联关系

    首先,多对多关联意味着两个实体类之间存在多个匹配关系。例如,一个用户可以属于多个角色,同时一个角色也可以被多个用户拥有。在数据库层面,这通常通过一张包含两个外键的中间表来实现。在Hibernate中,我们可以...

    hibernate关联关系总结

    多对多关联表示两个实体之间可能存在多个匹配,例如学生可以选择多门课程,课程也可以被多个学生选择。这种关系需要一个中间表来存储双方的映射关系。在Hibernate中,使用@ManyToMany注解,同时定义@JoinTable注解...

    hibernate03:多对一单向关联、多对一双向关联

    在数据库设计中,多对一关联意味着一个实体可以与多个其他实体相关联,而每个其他实体只能与一个该实体相关联。在Hibernate中,我们通过在映射文件或注解中定义这种关系来实现这一概念。以下是一个简单的例子: ...

    spring_mvc注解总结

    10. **@ManyToOne, @JoinColumn**: 这些注解用于定义实体之间的多对一关系,@ManyToOne表示一个实体可能关联多个另一个实体,@JoinColumn则用于指定外键所在的列名。 11. **@Lob**: 用于标记字段为Blob或Clob类型,...

    Hibernate一对一单向外键关联 (联合主键annotation)

    联合主键意味着多个字段共同构成主键,这样可以提供更为复杂和灵活的主键策略。 以下是一个示例,假设我们有两个实体,一个是`Person`,另一个是`Passport`,它们之间是一对一的单向外键关联,且`Passport`的主键由...

    hibernate多对多关系项目

    在数据库设计中,多对多关系表示两个实体之间存在多个匹配的可能性。例如,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在Hibernate中,这种关系通常通过中间表或关联表来实现,它存储了双方实体的...

    (5)Hibernate中的many-to-many和并发

    在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据模型,它表示一个实体可以与多个其他实体之间存在关联,反之亦然。这篇博客文章可能会深入探讨如何在Hibernate中处理这种多对多的关系,并可能涉及...

    JPA 批注总结参考

    - `@SecondaryTable`, `@SecondaryTables`:用于定义实体在多个表中的映射。 - `@Column`:用于指定实体字段与数据库列之间的映射,包括列名、长度、是否可为空等属性。 - `@JoinColumn`, `@JoinColumns`, `@...

    hibernate_many2one

    过多的关联可能导致N+1查询问题,即在加载一个实体及其多个关联实体时,除了加载该实体本身的查询外,还会对每个关联实体发起单独的查询,这在大数据量下可能成为性能瓶颈。为了避免这种情况,可以考虑使用`fetch=...

    hibernate关联查询

    在这里,`@OneToMany`注解表示User类与Order类之间的一对多关系,`mappedBy`属性指定了关联的字段,即Order中的`user`字段。而`@ManyToOne`注解则表示Order类与User类之间的多对一关系。 ### 2. FetchType与...

    HibernateAnnotation

    - **`@OneToOne`** 和 **`@JoinColumn`**:用于表示一对一关联关系,并指定外键的名称。 ```java @Entity class MedicalHistory implements Serializable { @Id @OneToOne @JoinColumn(name = "person_id") ...

    JAVA项目学习笔记

    8. **@JoinColumn**: 在JPA中,这个注解用于定义一对一或一对多关系中的外键,例如在@ManyToOne关系中,指定关联表的列名称。 9. **@Temporal**: 这个JPA注解用于处理日期和时间类型的字段,例如指定Date类型的属性...

    SSH注解-配置方式

    `@ManyToOne`表示多对一的关系,`@JoinColumn`指定外键列名。对于实体类的属性,如`name`、`boldNamePrint`等,使用`@Column`定义其在数据库表中的字段信息,包括长度、是否可为空等。 此外,还有其他的一些属性,...

Global site tag (gtag.js) - Google Analytics