简体   繁体   English

Eclipse“从表生成实体”和“多对一”关系

[英]Eclipse 'generate entities from tables' and 'many to one' relation

i am developing a simple Java EE application, that uses database. 我正在开发一个使用数据库的简单Java EE应用程序。 It has two tables (Admin and Session signature) connected with many to one relation. 它有两个表(Admin和Session签名),它们之间存在多对一关系。

When i used eclipse to generate entities from tables, my attribute that links both tables was generated like this: 当我使用eclipse从表生成实体时, links两个表的属性是这样生成的:

//bi-directional many-to-one association to Admin
@ManyToOne
@JoinColumn(name="owner")
private Admin admin;

Problem is, my owner attribute is Integer in database, and it has been created as Admin type. 问题是,我的owner属性是数据库中的Integer,并且已将其创建为Admin类型。

Now when i want to pass some Integer variable to input it to database i get error: 现在,当我想传递一些Integer变量以将其输入数据库时​​,出现错误:

The method setAdmin(Admin) in the type Signaturesession is not applicable for arguments (int).

Or when i want to cast it to (Admin) like this (taking it from session): 或者当我想像这样将其投射到(Admin)(从会话中获取)时:

(Admin)session.getAttribute("adminId")

I get Jboss Error: 我收到Jboss错误:

javax.servlet.ServletException: java.lang.ClassCastException: java.lang.Integer cannot be cast to com.podpisy.entities.Admin
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
secure.SecurityCheckFilter.doFilter(SecurityCheckFilter.java:100)

I am sure that this can be done easy, but i'm just really bad using Java. 我确信这可以轻松完成,但是使用Java真的很糟糕。

Thanks for any help. 谢谢你的帮助。

EDIT: 编辑:

My Admin.java class: 我的Admin.java类:

package com.podpisy.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;


@Entity
@Table(name="admins")
@NamedQuery(name="Admin.findAll", query="SELECT a FROM Admin a")
public class Admin implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    private String login;

    private String password;

    //bi-directional many-to-one association to Signature
    @OneToMany(mappedBy="admin")
    private List<Signature> signatures;

    //bi-directional many-to-one association to Signaturesession
    @OneToMany(mappedBy="admin")
    private List<Signaturesession> signaturesessions;

    public Admin() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLogin() {
        return this.login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<Signature> getSignatures() {
        return this.signatures;
    }

    public void setSignatures(List<Signature> signatures) {
        this.signatures = signatures;
    }

    public Signature addSignature(Signature signature) {
        getSignatures().add(signature);
        signature.setAdmin(this);

        return signature;
    }

    public Signature removeSignature(Signature signature) {
        getSignatures().remove(signature);
        signature.setAdmin(null);

        return signature;
    }

    public List<Signaturesession> getSignaturesessions() {
        return this.signaturesessions;
    }

    public void setSignaturesessions(List<Signaturesession> signaturesessions) {
        this.signaturesessions = signaturesessions;
    }

    public Signaturesession addSignaturesession(Signaturesession signaturesession) {
        getSignaturesessions().add(signaturesession);
        signaturesession.setAdmin(this);

        return signaturesession;
    }

    public Signaturesession removeSignaturesession(Signaturesession signaturesession) {
        getSignaturesessions().remove(signaturesession);
        signaturesession.setAdmin(null);

        return signaturesession;
    }

}

My Signaturesession.class: 我的Signaturesession.class:

package com.podpisy.entities;

import java.io.Serializable;

import javax.persistence.*;


/**
 * The persistent class for the signaturesession database table.
 * 
 */
@Entity
@NamedQuery(name="Signaturesession.findAll", query="SELECT s FROM Signaturesession s")
public class Signaturesession implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    private String device;

    private String name;

    private int signatures;

    private int time;

    private String type;

    private int users;

    //bi-directional many-to-one association to Admin
    @ManyToOne
    @JoinColumn(name="owner")
    private Admin admin;

    public Signaturesession() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDevice() {
        return this.device;
    }

    public void setDevice(String device) {
        this.device = device;
    }

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

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

    public int getSignatures() {
        return this.signatures;
    }

    public void setSignatures(int signatures) {
        this.signatures = signatures;
    }

    public int getTime() {
        return this.time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    public String getType() {
        return this.type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getUsers() {
        return this.users;
    }

    public void setUsers(int users) {
        this.users = users;
    }

    public Admin getAdmin() {
        return this.admin;
    }

    public void setAdmin(Admin admin) {
        this.admin = admin;
    }

}

You should pass an Admin object which surely has an int id field. 您应该传递一个肯定具有int id字段的Admin对象。

So you've to make something like this 所以你必须做这样的事情

  Admin myAdmin=new Admin(id,.. other properties);
  mySignaturesession.setAdmin(myAdmin); 

EDIT 编辑

Above is valid if you want to associate and Admin to your SignatureSession object. 如果您想将Admin和Admin关联到SignatureSession对象,则以上内容有效。 Instead if you have an Admin ojbect in Session you just have to execute 相反,如果您在Session中有一个管理员对象,则只需执行

       Admin anAdmin=(Admin)session.getAttibute("adminId");
       Admin myAdmin=new Admin(id,.. other properties);

or Admin myAdmin=new Admin(); 或管理员myAdmin = new Admin(); myAdmin.setId(anId); myAdmin.setId(anId);

But, i repeat, it depends from what you have in the Session and which objects you handle. 但是,我重复一遍,这取决于您在Session中拥有的内容以及要处理的对象。 And, as you look to be using JPA, dont forget to do something like em.persist or em.merge on your objects. 而且,当您希望使用JPA时,请不要忘记对对象执行em.persist或em.merge之类的操作。 Maybe you should get a little deeper on how JPA works. 也许您应该更深入地了解JPA的工作原理。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM