Playframework play framework 2(Java)中的一对多关系表单示例

Playframework play framework 2(Java)中的一对多关系表单示例,playframework,playframework-2.0,Playframework,Playframework 2.0,我有以下两种模式;国家 class Country extends Model { //country has many states } class State extends Model{ //state belongs to country } 在我的场景中,一个国家有许多州,我希望用户创建和添加他们想要的州 我对play框架不熟悉,正在寻找一个继承表单的好例子,以便用户可以动态添加多个状态子表单并保存/编辑它们 我非常希望能为上述情况提供一个简单的示例表单。使用鉴别器值即可。我还没有

我有以下两种模式;国家

class Country extends Model {
//country has many states
}

class State extends Model{
//state belongs to country
}
在我的场景中,一个国家有许多州,我希望用户创建和添加他们想要的州

我对play框架不熟悉,正在寻找一个继承表单的好例子,以便用户可以动态添加多个状态子表单并保存/编辑它们


我非常希望能为上述情况提供一个简单的示例表单。

使用鉴别器值即可。我还没有厌倦使用Ebean继承,我不明白为什么在使用TablePerClass策略时需要使用鉴别器(正如我下面使用的,但是没有鉴别器我会出错)。OpenJPA有一些其他的例子。Eben遵循JPA的大部分内容,因此它可能无法完全像JPA那样工作,您必须尝试看看

package models.test;

import play.db.ebean.Model;

import javax.persistence.*;

/**
 * Created by aakture on 3/12/14.
 */
@Entity
@Inheritance (strategy= InheritanceType.TABLE_PER_CLASS)
@DiscriminatorValue("S")
public class State extends Model {
    @Id
    protected Long id;

    protected String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package models.test;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

/**
 * Created by aakture on 3/12/14.
 */
@Entity
@DiscriminatorValue("MS")
public class MyState extends State {
    String addedProperty;

    public String getAddedProperty() {
        return addedProperty;
    }

    public void setAddedProperty(String addedProperty) {
        this.addedProperty = addedProperty;
    }
}

package models.test;

import play.db.ebean.Model;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.List;

/**
 * Created by aakture on 3/12/14.
 */
@Entity
public class Country extends Model {
    @Id
    Long id;

    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @OneToMany (cascade = CascadeType.ALL)
    List<State> states;

    public List<State> getStates() {
        return states;
    }

    public void setStates(List<State> states) {
        this.states = states;
    }
    public static Model.Finder<Long, Country> find = new Model.Finder<Long, Country>(
            Long.class, Country.class);
}
package models.test;
导入play.db.ebean.Model;
导入javax.persistence.*;
/**
*由aakture于2014年3月12日创建。
*/
@实体
@继承(策略=继承类型。每个类的表)
@鉴别器值(“S”)
公共类状态扩展模型{
@身份证
保护长id;
受保护的字符串名称;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
}
包装模型试验;
导入javax.persistence.DiscriminatorValue;
导入javax.persistence.Entity;
/**
*由aakture于2014年3月12日创建。
*/
@实体
@鉴别器值(“MS”)
公共类MyState扩展了State{
字符串加法属性;
公共字符串getAddedProperty(){
返回addedProperty;
}
public void setAddedProperty(字符串addedProperty){
this.addedProperty=addedProperty;
}
}
包装模型试验;
导入play.db.ebean.Model;
导入javax.persistence.CascadeType;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
导入java.util.List;
/**
*由aakture于2014年3月12日创建。
*/
@实体
公共阶级国家扩展模式{
@身份证
长id;
字符串名;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@OneToMany(级联=级联类型.ALL)
列出国家名单;
公共列表getStates(){
返回状态;
}
公共无效集合状态(列表状态){
this.states=状态;
}
public static Model.Finder=new Model.Finder(
长类、国家类);
}
还有一个测试:

@Test
public void testCountryState() {
    Country country = new Country();
    country.setName("Canada");
    List<State> states = new ArrayList<State>();
    State state = new State();
    state.setName("This is a State");
    states.add(state);
    MyState mystate = new MyState();
    mystate.setName("This is a MyState");
    mystate.setAddedProperty("an added property");
    states.add(mystate);
    country.setStates(states);
    country.save();

    country = Country.find.where().eq("name", "Canada").findUnique();

}
@测试
公共无效testCountryState(){
国家=新国家();
国家/地区名称(“加拿大”);
列表状态=新的ArrayList();
状态=新状态();
state.setName(“这是一个州”);
添加(州);
MyState MyState=新MyState();
setName(“这是一个mystate”);
mystate.setAddedProperty(“添加的属性”);
添加(mystate);
国家。集合州(州);
国家。拯救();
country=country.find.where().eq(“名称”、“加拿大”).findUnique();
}

我询问了如何使用构建表单进行继承。好的,我没有尝试使用表单,但继承策略是相同的。如果有机会,我会尝试一下,但是说您只需使用formuserform=form(State.class)创建表单;然后绑定它,所以我认为你可以绑定State的任何子类。这就是你想做的吗?