`
TRAMP_ZZY
  • 浏览: 138868 次
社区版块
存档分类
最新评论

playframework OneToMany @JoinTable 不支持

阅读更多

play framework(v2.3.7) 集成Eean,不支持@OneToMany 生成中间表。
这是Ebean 实现JPA 标准的一个BUG。参见:https://github.com/ebean-orm/avaje-ebeanorm/issues/123

package models;

import play.db.ebean.Model;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by zhaoyu on 12/28/14.
 */
@Entity
@Table(name = "t_clientapp")
public class ClientAppDao extends Model {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    @Column(nullable = false, unique = true)
    public String clientNum;

    @Column(nullable = false)
    public String clientName;

    @ManyToOne
    @JoinColumn(name = "developer_id")
    public DeveloperDao developer;

    public String clientServerUrl;
    public String clientInfoUrl;
    public String version;
    public Double price;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(
            name = "t_clientapp_photo",
            joinColumns = @JoinColumn(name = "client_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "photo_id", referencedColumnName = "id")
    )
    public List<PhotoDao> photos = new ArrayList<PhotoDao>();

    @ElementCollection
    @CollectionTable(
            name = "t_clientapp_tag",
            joinColumns = @JoinColumn(name = "client_id", referencedColumnName = "id")
    )
    @Column(name = "tag")
    public List<String> tags;


    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(
            name = "t_clientapp_logo",
            joinColumns = @JoinColumn(name = "client_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "logo_id", referencedColumnName = "id")
    )
    public List<LogoDao> logos;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(
            name = "t_clientapp_function",
            joinColumns = @JoinColumn(name = "client_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "function_id", referencedColumnName = "id")
    )
    public List<FunctionDao> functions;

    public String description;
    public String size;
    public Long downloads;

    @Temporal(TemporalType.TIMESTAMP)
    public Date onShelf;

    @OneToOne
    @JoinColumn(name = "type_id")
    public AppTypeDao type;

    public static Finder<Long, ClientAppDao> find = new Finder<Long, ClientAppDao>(
            Long.class, ClientAppDao.class
    );

    public ClientAppDao() {}

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ClientAppDao clientApp = (ClientAppDao) o;

        if (clientNum != null ? !clientNum.equals(clientApp.clientNum) : clientApp.clientNum != null) return false;
        if (id != null ? !id.equals(clientApp.id) : clientApp.id != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (clientNum != null ? clientNum.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "ClientApp{" +
                "id=" + id +
                ", clientNum='" + clientNum + '\'' +
                ", clientName='" + clientName + '\'' +
                ", clientServerUrl='" + clientServerUrl + '\'' +
                ", clientInfoUrl='" + clientInfoUrl + '\'' +
                ", version='" + version + '\'' +
                ", price=" + price +
                ", description='" + description + '\'' +
                ", size='" + size + '\'' +
                ", downloads=" + downloads +
                ", onShelf=" + onShelf +
                '}';
    }
}


分享到:
评论

相关推荐

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    @JoinTable注解定义了中间表及其连接列,而mappedBy属性表明Course实体是关系的拥有者。 以上就是关于Hibernate对象三状态以及OneToOne、OneToMany和ManyToMany关系映射的详细讲解,希望对你理解Hibernate的工作...

    Hibernate_Annotation关联映射

    通过@JoinTable批注定义关联表,该关联表包含了指回实体表的外键(通过@JoinTable.joinColoumns)以及指向目标实体表的外键(通过@JoinTable.inverseJoinColoumns) @Entity @Table(name="Test_TreeType") public class ...

    JPA课程manyToMany OneToMany 等全部测试

    这个注解通常需要配合`@JoinTable`一起使用,用于指定连接表的详细信息,包括表名、外键列名等。 ```java @Entity public class Student { @ManyToMany @JoinTable(name = "student_course", joinColumns = @...

    onetomany-hibernate

    如果使用注解,可以在父类的集合属性上添加`@JoinColumn`或`@JoinTable`注解来详细定义关联。 在MyEclipse中,创建Hibernate项目时,需要配置Hibernate的lib库,设置Hibernate的配置文件(hibernate.cfg.xml),并...

    Hibernate关于注解的一对多,多对多,一对一

    2. **@JoinColumn** 或 **@JoinTable**:对于一端,我们通常需要使用`@JoinColumn`注解来指定外键所在的列,如果关系是通过中间表建立的,则使用`@JoinTable`。 ```java @Entity public class Teacher { @...

    Hibernate注释

    此例中,`Trainer`类与`Monkey`类之间通过`@JoinTable`定义了一个中间表`TrainedMonkeys`,用于存储双方的关联关系。`@JoinColumn(name = "trainer_id")`指定了`Trainer`表的关联字段,`@JoinColumn(name = "monkey_...

    Hibernate- oneToMany using annotation

    这个注解的使用通常配合`@JoinColumn`或`@JoinTable`来指定关联的外键字段或联接表。 首先,我们需要理解`@OneToMany`的基本配置: 1. **mappedBy**:此属性用于指定被关联方(子实体)中的引用字段,通常是一个`@...

    HIBERNATE 一对多 onetomany

    在Hibernate中,这种关系可以通过在实体类中定义`@OneToMany`注解来表示。 **配置实体类** 1. **父实体类**:在这个关系中,"一"端的实体称为父实体。例如,我们用`Student`作为父实体,它有一对多的课程关联。在`...

    Hibernate 的多对一、一对多、多对多

    `@JoinTable`定义了中间表的名称以及两侧实体如何关联,而`mappedBy`属性则指定了关系的反向字段。 总结起来,Hibernate通过这三种关系映射机制,使得开发者能够轻松地处理复杂的数据关系,将Java对象模型和关系...

    JPA_OneToMany学习教程

    "JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对多关系时。本教程将深入探讨JPA中的OneToMany映射关系,以及如何在实际开发中有效地应用。 1. **OneToMany关系**:在关系数据库中...

    JPA映射关系详解javax JPA JPA映射关系 JPA映射

    在 JPA 中,使用 `@ManyToMany` 注解来定义这种关系,并通过 `@JoinTable` 注解来指定中间表的结构。 **中间表只有关联的两张表字段的情况:** 当中间表仅包含两个关联表的外键时,可以使用简单的 `@JoinTable` 来...

    ssh全注解项目(一对一,一对多,多对多)

    - `@OneToMany`表示一对多关系,通常配合`@JoinColumn`或`@JoinTable`使用,设置关联字段。 - `@ManyToOne`对应多对一关系,关联的属性会自动添加到多方实体的集合中。 - `@ManyToMany`用于建立多对多关系,通常需要...

    spring jpa ManyToMany原理及用法详解

    在上面的代码中,我们使用 @ManyToMany 注解来定义 ManyToMany 关系,并使用 @JoinTable 来指定中间关系连接表的名称和列名。 在 ManyToMany 关系中,我们还需要使用 mappedBy 属性来指定拥有关系的字段。mappedBy ...

    Hibernate高级映射实例

    在实体类中,我们在“一”的一方使用@OneToMany注解,同时可以通过@JoinColumn或@JoinTable来定义关联的外键。由于关系是单向的,所以“多”的一方不需要知道这个关系。 4. **单向多对多映射**: 这种关系中,例如...

    oneToMany.rar

    这个注解通常应用在字段或getter方法上,且需要配合`@JoinColumn`或`@JoinTable`来指定关联的外键。 2. **配置示例**: 假设我们有`User`和`Order`两个实体,`User`可以有多个`Order`。 在`User`实体中: ```...

    hibernate 关系注解

    当一对一关系通过中间关联表实现时,使用`@JoinTable`注解。例如: ```java @OneToOne(cascade = CascadeType.ALL) @JoinTable( name="basicdetail", joinColumns=@JoinColumn(name="class1id"), ...

    Hibernate 两种方式映射many to many

    在Hibernate中,我们可以通过`@ManyToMany`注解来定义这种关系,并使用`@JoinTable`注解来指定中间表的信息。例如: ```java @Entity public class Student { @Id @GeneratedValue(strategy = GenerationType....

    jpa的实体映射关系7种

    使用`@ManyToMany`注解,关联表通常由JPA自动创建,除非自定义了`@JoinTable`。 7. **双向多对多**: 双向多对多是最复杂的关系,允许两个实体互相拥有对方。双方都需要`@ManyToMany`注解,且通过`mappedBy`属性...

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

    在Java开发中,Hibernate是一个流行的ORM(Object-...4. 对于多对多关联,需要使用`@JoinTable`定义中间表。 5. 检查类型匹配,确保数据库字段类型与Java类型对应。 6. 如果遇到错误,检查配置是否完整,注解是否正确。

    JPA一对一,一对多,多对多关系映射

    - `@JoinColumn`或`@JoinTable`注解用于定义外键或中间表。 例如: ```java @Entity public class User { @Id private Long id; @OneToMany(mappedBy = "user") private List&lt;Order&gt; orders; } @Entity ...

Global site tag (gtag.js) - Google Analytics