gpt4 book ai didi

java - Eclipse 'generate entities from tables' 和 'many to one' 关系

转载 作者:行者123 更新时间:2023-11-29 11:11:47 25 4
gpt4 key购买 nike

我正在开发一个使用数据库的简单 Java EE 应用程序。它有两个以多对一关系连接的表(管理和 session 签名)。

当我使用 Eclipse 从表生成实体时,链接两个表的属性是这样生成的:

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

问题是,我的 owner 属性在数据库中是 Integer,并且已创建为 Admin 类型。

现在,当我想传递一些整数变量将其输入到数据库时,我收到错误:

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

或者当我想像这样将其转换到(管理员)时(从 session 中获取):

(Admin)session.getAttribute("adminId")

我收到 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)

我确信这可以很容易地完成,但我真的不擅长使用 Java。

感谢您的帮助。

编辑:

我的 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;
}

}

我的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;
}

}

最佳答案

您应该传递一个肯定具有 int id 字段的 Admin 对象。

所以你必须做这样的事情

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

编辑

如果您想将 Admin 关联到您的 SignatureSession 对象,则上述内容有效。相反,如果您在 session 中有一个管理对象,您只需执行

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

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

但是,我再说一遍,这取决于您在 session 中拥有的内容以及您处理的对象。而且,当您希望使用 JPA 时,不要忘记对对象执行诸如 em.persist 或 em.merge 之类的操作。也许您应该更深入地了解 JPA 的工作原理。

关于java - Eclipse 'generate entities from tables' 和 'many to one' 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com