Orm 游戏框架模型关系

Orm 游戏框架模型关系,orm,playframework,entity,entity-relationship,ebean,Orm,Playframework,Entity,Entity Relationship,Ebean,我正在研究play框架,尝试使用play java制作api,我做了插入、删除和更新 当我制作带有会话的登录系统时,我对两个模型之间的关系表示怀疑 我在网上搜索了2天,但我不知道如何才能做到这一点 我正在使用ebean,实体模型,并尝试: 我的控制器: package controllers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode

我正在研究play框架,尝试使用play java制作api,我做了插入、删除和更新

当我制作带有会话的登录系统时,我对两个模型之间的关系表示怀疑

我在网上搜索了2天,但我不知道如何才能做到这一点

我正在使用ebean,实体模型,并尝试:

我的控制器:

package controllers;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import models.AdministratorSessions;
import models.Administrators;
import play.libs.Json;
import play.mvc.*;

import java.util.List;

import static play.libs.Json.toJson;

public class Administrator extends Controller {
    public static Result login(){
        JsonNode json               = request().body().asJson();

        if(json != null){
            String email    = json.findPath("email").asText();
            String password = json.findPath("password").asText();

            AdministratorSessions admSession = Administrators.loginAdm(email, password);

            if(admSession != null) {
                ObjectNode result = Json.newObject();
                result.put("status", "OK");
                result.put("dara", Json.toJson(admSession));
                return ok(toJson(result));
            }else{
                return badRequest("Error loggin administrator");
            }
        }else{
            return badRequest("Expecting Json data");
        }
    }
}
我的管理员模型:

package models;

import javax.persistence.*;
import play.db.ebean.*;
import utils.HashString;

import java.util.*;

/**
 * Created by sidnei on 6/12/14.
 */
@Entity
public class Administrators extends Model {

    @Id
    @Column(name="administrator_id", nullable=false, length=32)
    public String id;

    @Column(name="administrator_email", nullable=false, length=255)
    public String email;

    @Column(name="administrator_name", nullable=false, length=255)
    public String name;

    @Column(name="administrator_password", nullable=false, length=32)
    public String password;

    @Column(name="administrator_date", nullable=false)
    public Date admDate;

    @Column(name="administrator_active", nullable=false)
    public Boolean active;

    @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "administrators")
    public List<AdministratorSessions> administrator_sessions;

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

    public Administrators(String _name, String _email, String _password) {
        this.name       = _name;
        this.email      = _email;
        this.password   = HashString.makeHash(_password);
        this.admDate    = new Date();
        this.active     = true;
        this.id         = HashString.makeHash(_name + _email + password + "locationProjectSecret");
    }

    public static Administrators createAdm(String _name, String _email, String _password){
        try {
            Administrators adm = new Administrators(_name, _email, _password);
            adm.save();
            return adm;
        }catch (Exception e){
            return null;
        }
    }

    public static AdministratorSessions loginAdm(String _email, String _password){
        try {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("email", _email);
            params.put("password", HashString.makeHash(_password));

            Administrators adm = Administrators.find.where().allEq(params).findUnique();

            if (adm != null){
                AdministratorSessions admSession = AdministratorSessions.create(adm.id);
                return admSession;
            }else{
                return null;
            }
        }catch (Exception e){
            return null;
        }
    }
}
(这是一个例子)

因此,administrator\u id从不使用administrators模型中的管理员id填充

我如何才能做到这一点?使用此api的最佳实践是什么

如果有人有一个例子或解释它是如何工作的,我会非常高兴

谢谢

=============已编辑已解决

我解决了这个问题,首先,显然,我需要传递对象管理员,而不是管理员的id

然后我遇到了一个json序列化的问题(RuntimeException:java.lang.IllegalArgumentException:Infinite递归)

关于这个主题:我解决了我的问题,所以,我的课程现在是这样的:

 session_key | session_date | session_active | administrator_id
-------------+--------------+----------------+-----------------
 f1d4c3296d1 | 2014-06-17   | t              |
管理员模型:

package models;

import javax.persistence.*;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import play.Logger;
import play.db.ebean.*;
import utils.HashString;

import java.util.*;

/**
 * Created by sidnei on 6/12/14.
 */
@Entity
public class Administrators extends Model {

    @Id
    @Column(name="administrator_id", nullable=false, length=32)
    public String id;

    @Column(name="administrator_email", nullable=false, length=255)
    public String email;

    @Column(name="administrator_name", nullable=false, length=255)
    public String name;

    @Column(name="administrator_password", nullable=false, length=32)
    public String password;

    @Column(name="administrator_date", nullable=false)
    public Date admDate;

    @Column(name="administrator_active", nullable=false)
    public Boolean active;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "administrators")
    @Column(nullable = true)
    @JsonManagedReference
    public Set<AdministratorSessions> administrator_sessions;

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

    public static AdministratorSessions loginAdm(String _email, String _password){
        try {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("email", _email);
            params.put("password", HashString.makeHash(_password));

            Administrators adm = Administrators.find.where().allEq(params).findUnique();

            if (adm != null){
                AdministratorSessions admSession = AdministratorSessions.create(adm);
                return admSession;
            }else{
                return null;
            }
        }catch (Exception e){
            return null;
        }
    }
}
封装模型;
导入javax.persistence.*;
导入com.fasterxml.jackson.annotation.JsonManagedReference;
导入play.Logger;
导入play.db.ebean.*;
导入utils.HashString;
导入java.util.*;
/**
*由sidnei于2014年6月12日创建。
*/
@实体
公共类管理员扩展模型{
@身份证
@列(name=“administrator\u id”,null=false,长度=32)
公共字符串id;
@列(name=“administrator\u email”,null=false,长度=255)
公共字符串电子邮件;
@列(name=“administrator\u name”,null=false,长度=255)
公共字符串名称;
@列(name=“administrator\u password”,null=false,长度=32)
公共字符串密码;
@列(name=“administrator\u date”,null=false)
公开日期;
@列(name=“administrator\u active”,null=false)
公共布尔活动;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“administrators”)
@列(nullable=true)
@JsonManagedReference
公共设置管理员会话;
publicstaticfinder=newfinder(Long.class,Administrators.class);
公共静态管理员会话登录(字符串_电子邮件,字符串_密码){
试一试{
Map params=新的HashMap();
参数put(电子邮件);
params.put(“password”,HashString.makeHash(_password));
Administrators adm=Administrators.find.where().allEq(params.findUnique();
如果(adm!=null){
AdministratorSessions admSession=AdministratorSessions.create(adm);
返回会话;
}否则{
返回null;
}
}捕获(例外e){
返回null;
}
}
}
管理员会话模型:

package models;

import play.Logger;
import play.db.ebean.Model;
import utils.HashString;

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

/**
 * Created by sidnei on 6/12/14.
 */
@Entity
public class AdministratorSessions extends Model {

    @Id
    @Column(name="administrator_session_key", nullable=false, length=32)
    public String id;

    @Column(name="administrator_session_date", nullable=false)
    public Date sessionDate;

    @Column(name="administrator_session_active", nullable=false)
    public Boolean active;

    @ManyToOne
    @JoinColumn(name = "administrator_id")
    public Administrators administrators;

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

    public AdministratorSessions(String _adminId) {
//        this.administrator_id   = _adminId;
        this.sessionDate        = new Date();
        this.id                 = HashString.makeHash(_adminId + this.sessionDate.toString() + "locationProjectSecretForSession" + Math.random());
        this.active             = true;
    }

    public static AdministratorSessions create(String _adminId){
        try{
            AdministratorSessions admSessions = new AdministratorSessions(_adminId);
            admSessions.save();
            return admSessions;
        }catch (Exception e){
            Logger.info("aqui");
            Logger.debug(e.getMessage());
            return  null;
        }
    }
}
package models;

import com.fasterxml.jackson.annotation.JsonBackReference;
import play.Logger;
import play.db.ebean.Model;
import utils.HashString;

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

/**
 * Created by sidnei on 6/12/14.
 */
@Entity
public class AdministratorSessions extends Model {

    @Id
    @Column(name="administrator_session_key", nullable=false, length=32)
    public String key;

    @Column(name="administrator_session_date", nullable=false)
    public Date sessionDate;

    @Column(name="administrator_session_active", nullable=false)
    public Boolean active;

    @ManyToOne
    @JoinColumn(name = "administrator_id")
    @JsonBackReference
    public Administrators administrators;

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

    public AdministratorSessions(Administrators _adm) {
        this.administrators     = _adm;
        this.sessionDate        = new Date();
        this.key                = HashString.makeHash(_adm.id + this.sessionDate.toString() + "locationProjectSecretForSession" + Math.random());
        this.active             = true;
    }

    public static AdministratorSessions create(Administrators _adm){
        try{
            AdministratorSessions admSessions = new AdministratorSessions(_adm);
            admSessions.save();
            return admSessions;
        }catch (Exception e){
            Logger.info("aqui");
            Logger.debug(e.getMessage());
            return  null;
        }
    }
}
封装模型;
导入com.fasterxml.jackson.annotation.JsonBackReference;
导入play.Logger;
导入play.db.ebean.Model;
导入utils.HashString;
导入javax.persistence.*;
导入java.util.Date;
/**
*由sidnei于2014年6月12日创建。
*/
@实体
公共类管理员会话扩展模型{
@身份证
@列(name=“administrator\u session\u key”,null=false,长度=32)
公共字符串密钥;
@列(name=“administrator\u session\u date”,null=false)
公众日期会期;
@列(name=“administrator\u session\u active”,null=false)
公共布尔活动;
@许多酮
@JoinColumn(name=“administrator\u id”)
@JsonBackReference
公共行政人员;
publicstaticfinder=newfinder(Long.class,AdministratorSessions.class);
公共行政部门(行政部门){
this.administrators=\u adm;
this.sessionDate=新日期();
this.key=HashString.makeHash(_adm.id+this.sessionDate.toString()+“locationProjectSecretForSession”+Math.random());
this.active=true;
}
公共静态管理员会话创建(管理员_adm){
试一试{
管理员会话admSessions=新管理员会话(_adm);
admSessions.save();
返回会话;
}捕获(例外e){
Logger.info(“aqui”);
debug(例如getMessage());
返回null;
}
}
}
现在很好用,谢谢