gpt4 book ai didi

java - Hibernate @ManytoOne 问题

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:59 25 4
gpt4 key购买 nike

我对此很陌生,目前正在使用 hibernate 框架开展一个大学项目。我目前正在努力实现的是能够获得 List<> Graveowners 并转换为 json 字符串,然后发送到前端进行处理。我不确定我一直做错了什么,而且在涉及 json 等技术时我并不是最好的。这就是我的 class Graveowners 中的内容。 :

Entity
@Table(name="graveowner"
,catalog="dspc_explorer"
)
public class Graveowner implements java.io.Serializable {

private int graveId;
private Section section;
private String graveRefCode;
private String graveOwnerName;
private String graveOwnerAddress;
private Date graveopenDate;
private int graveRow;
private int graveDepth;
private String graveLocation;
private byte[] graveImage;
private Set<Registrar> registrars = new HashSet<Registrar>(0);

public Graveowner() {
}

public Graveowner(int graveId, Section section, int graveRow, int graveDepth) {
this.graveId = graveId;
this.section = section;
this.graveRow = graveRow;
this.graveDepth = graveDepth;
}

public Graveowner(int graveId, Section section, String graveRefCode, String graveOwnerName, String graveOwnerAddress, Date graveopenDate, int graveRow, int graveDepth, String graveLocation, byte[] graveImage, Set<Registrar> registrars) {
this.graveId = graveId;
this.section = section;
this.graveRefCode = graveRefCode;
this.graveOwnerName = graveOwnerName;
this.graveOwnerAddress = graveOwnerAddress;
this.graveopenDate = graveopenDate;
this.graveRow = graveRow;
this.graveDepth = graveDepth;
this.graveLocation = graveLocation;
this.graveImage = graveImage;
this.registrars = registrars;
}

@Id

@Column(name="grave_id", unique=true, nullable=false)
public int getGraveId() {
return this.graveId;
}

public void setGraveId(int graveId) {
this.graveId = graveId;
}

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="sectionId", nullable=false)
public Section getSection() {
return this.section;
}

public void setSection(Section section) {
this.section = section;
}

@Column(name="grave_ref_code", length=50)
public String getGraveRefCode() {
return this.graveRefCode;
}

public void setGraveRefCode(String graveRefCode) {
this.graveRefCode = graveRefCode;
}

@Column(name="grave_owner_name", length=100)
public String getGraveOwnerName() {
return this.graveOwnerName;
}

public void setGraveOwnerName(String graveOwnerName) {
this.graveOwnerName = graveOwnerName;
}

@Column(name="grave_owner_address", length=150)
public String getGraveOwnerAddress() {
return this.graveOwnerAddress;
}

public void setGraveOwnerAddress(String graveOwnerAddress) {
this.graveOwnerAddress = graveOwnerAddress;
}

@Temporal(TemporalType.DATE)
@Column(name="graveopen_date", length=10)
public Date getGraveopenDate() {
return this.graveopenDate;
}

public void setGraveopenDate(Date graveopenDate) {
this.graveopenDate = graveopenDate;
}

@Column(name="grave_row", nullable=false)
public int getGraveRow() {
return this.graveRow;
}

public void setGraveRow(int graveRow) {
this.graveRow = graveRow;
}

@Column(name="grave_depth", nullable=false)
public int getGraveDepth() {
return this.graveDepth;
}

public void setGraveDepth(int graveDepth) {
this.graveDepth = graveDepth;
}

@Column(name="grave_location", length=100)
public String getGraveLocation() {
return this.graveLocation;
}

public void setGraveLocation(String graveLocation) {
this.graveLocation = graveLocation;
}

@Column(name="grave_image")
public byte[] getGraveImage() {
return this.graveImage;
}

public void setGraveImage(byte[] graveImage) {
this.graveImage = graveImage;
}

@OneToMany(fetch=FetchType.LAZY, mappedBy="graveowner.graveId")
public Set<Registrar> getRegistrars() {
return this.registrars;
}

public void setRegistrars(Set<Registrar> registrars) {
this.registrars = registrars;
}
}

然后在我的 Dao 类中,我目前有这个方法来检索 List<Graveowners> :

@Override
public List<Graveowner> getAllgraveOwners() {
try {
session = HibernateUtil.getSessionFactory().openSession();

tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Graveowner.class);
criteria.setFetchMode("section", FetchMode.JOIN)
.setFetchMode("registrars", FetchMode.JOIN);
List<Graveowner> graveOwnersList = criteria.list();

tx.commit();
return graveOwnersList;
} catch (HibernateException e) {
try {
tx.rollback();
} catch (RuntimeException r) {
System.out.println("Can't rollback transaction");
}
throw e;
} finally {
if (session != null) {
session.close();
}
}
}

然后我有一个处理 HTTPrequests, HTTPresponse 的命令类:

  public void execute(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(true);
Users user = (Users) request.getSession().getAttribute("user");
RequestDispatcher dispatcher;
try {
if (user != null) {
if (user.getUserType() == 0) {
UserServices userservice = new UserServices();
List<Graveowner> list = (ArrayList<Graveowner>) userservice.getAllGraveowner();
GeneralServices generalService = new GeneralServices();
generalService.printArrayList((ArrayList) list);

String jsonStringUserList = new Gson().toJson(list, Graveowner.class);
System.out.println(jsonStringUserList);
if (list != null) {
session.setAttribute("list", list);
session.setAttribute("jsonStringUserList", jsonStringUserList);
session.setAttribute("status", 0);
session.setAttribute("statusMessage", "List Users success");
dispatcher = getServletContext().getRequestDispatcher("ManageGraveOwner.jsp");
} else {
System.out.println("Empty List");
session.setAttribute("status", 1);
session.setAttribute("statusMessage", "List Users service failed or No users in database");
dispatcher = getServletContext().getRequestDispatcher("ProcessResult.jsp");
}
} else {
session.setAttribute("status", 2);
session.setAttribute("statusMessage", "No valid user logged in (Need Admin rights for this action)");
dispatcher = getServletContext().getRequestDispatcher("ProcessResult.jsp");

}
} else {
session.setAttribute("status", 3);
session.setAttribute("statusMessage", "Session expired.. ");
dispatcher = getServletContext().getRequestDispatcher("/SessionExpired.jsp");
}
dispatcher.forward(request, response);

} catch (ServletException | IOException ex) {
Logger.getLogger(LoginUserCommand.class.getName()).log(Level.SEVERE, null, ex);
}
}

当我实际运行项目时,我当前收到以下错误..

    Info:   manageGraveowner
Info: Hibernate: select this_.grave_id as grave_id1_0_2_, this_.sectionId as sectionI2_0_2_, this_.grave_ref_code as grave_re3_0_2_, this_.grave_owner_name as grave_ow4_0_2_, this_.grave_owner_address as grave_ow5_0_2_, this_.graveopen_date as graveope6_0_2_, this_.grave_row as grave_ro7_0_2_, this_.grave_depth as grave_de8_0_2_, this_.grave_location as grave_lo9_0_2_, this_.grave_image as grave_i10_0_2_, section2_.sectionId as sectionI1_2_0_, section2_.sectionCode as sectionC2_2_0_, section2_.dateOpened as dateOpen3_2_0_, section2_.graveCount as graveCou4_2_0_, registrars3_.graveId as graveId2_0_4_, registrars3_.reg_id as reg_id1_1_4_, registrars3_.reg_id as reg_id1_1_1_, registrars3_.graveId as graveId2_1_1_, registrars3_.reg_first_name as reg_firs3_1_1_, registrars3_.reg_middle_name as reg_midd4_1_1_, registrars3_.reg_last_name as reg_last5_1_1_, registrars3_.reg_sex as reg_sex6_1_1_, registrars3_.reg_age as reg_age7_1_1_, registrars3_.reg_religion as reg_reli8_1_1_, registrars3_.reg_occupation as reg_occu9_1_1_, registrars3_.reg_death_location as reg_dea10_1_1_, registrars3_.reg_marriage_status as reg_mar11_1_1_, registrars3_.regdeath_date as regdeat12_1_1_, registrars3_.regburial_date as regburi13_1_1_ from dspc_explorer.graveowner this_ inner join dspc_explorer.section section2_ on this_.sectionId=section2_.sectionId left outer join dspc_explorer.registrar registrars3_ on this_.grave_id=registrars3_.graveId
Info: com.dspc_explorer.Dtos.Graveowner@1c225fa9
Info: com.dspc_explorer.Dtos.Graveowner@6e802ad6
Info: com.dspc_explorer.Dtos.Graveowner@6e802ad6
Info: com.dspc_explorer.Dtos.Graveowner@4ee74a73
Warning: StandardWrapperValve[WebActionServlet]: Servlet.service() for servlet WebActionServlet threw exception
java.lang.IllegalArgumentException: Can not set int field com.dspc_explorer.Dtos.Graveowner.graveId to java.util.ArrayList
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(UnsafeIntegerFieldAccessorImpl.java:56)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.get(UnsafeIntegerFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:393)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:86)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
at com.google.gson.Gson.toJson(Gson.java:586)
at com.google.gson.Gson.toJson(Gson.java:565)
at com.google.gson.Gson.toJson(Gson.java:520)
at com.dspc_explorer.Commands.ManageGraveOwnerCommand.execute(ManageGraveOwnerCommand.java:46)
at com.dspc_explorer.servlet.WebActionServlet.processRequest(WebActionServlet.java:39)
at com.dspc_explorer.servlet.WebActionServlet.doPost(WebActionServlet.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:748)

我现在真的很困惑,花了很长时间试图弄清楚,所以决定注册并寻求帮助:(。我将不胜感激任何帮助,非常感激。提前致谢

最佳答案

问题出在

的第二个参数中
Gson.toJson()

实际上你不需要第二个参数。

关于java - Hibernate @ManytoOne 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875144/

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