首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在play框架中正确使用嵌入式模型?

如何在play框架中正确使用嵌入式模型?
EN

Stack Overflow用户
提问于 2011-10-26 05:13:33
回答 1查看 1.4K关注 0票数 2

我有一个嵌入的模型方案。有一个座席,而且座席所在的城市也是座席所在的城市。

这些模型如下所示:

城市:

代码语言:javascript
复制
package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class City extends Model {
    @Required
    @Column(unique=true)
    public String name;

    @ElementCollection
    @CollectionTable(name="city_translation",
        joinColumns=@JoinColumn(name="city_id"))
    @Column(name="translation")
    @MapKeyColumn(name="language")
    public Map<String, String> translations = new HashMap<String, String>();

    public City(String name) {
        this.name = name;
    }

    public String toString() {
        return this.name;
    }

    public void setTranslation(String language, String translation) {
        translations.put(language, translation);
    }

    public String getTranslation(String language) {
        return translations.get(language);
    }
}

代理:

代码语言:javascript
复制
package models;

import java.util.*;
import javax.persistence.*;

import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Agent extends Model {
    @Required
    @Column(unique=true)
    public String name;

    @Required
    @Column(unique=true)
    public String email;

    @Required
    public City city;

    public Agent(String name, String email, City city) {
        this.name = name;
        this.email = email;
        this.city = city;
    }
}

问题是,当在数据库(h2:mem)中创建代理模型时,city字段被声明为varbinary(255),而不是bigint,因此它不能保存City id。

因此,当我想在控制器中保存一个代理时,这个字段被正确地传递了(html: agent.city是选定的城市id),我可以从params.get(" agent.city ")中读取它,但是当我想把它作为agent.city引用时,它保持为空:

代码语言:javascript
复制
public static save(Agent agent) {
    Logger.info(params.get("agent.id")); // OK - for example: 1
    if (agent.city == null)
        Logger.info("agent.city is null"); // this is printed
}

如果我将@Embeddable添加到City类中,并将@Embedded表示法添加到Agent的city属性中,则在编译时会出现以下错误:

代码语言:javascript
复制
A JPA error occurred (Unable to build EntityManagerFactory): component property not found: id

请建议如何设置正确的模型。

我会避免在连接表中使用OneToOne关系,因为在City模型中我也需要引用id,但是City模型应该保持独立,它也用于其他模型中。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-26 16:39:29

在Agent实体的City属性上使用@OneToOne。您不必在城市对象中声明OneToOne。这意味着该关系将是单向的,但仍然有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7895973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档