java - Hibernate Annotation Mapping for Parent/Child Relationship? -


i'm having problems mapping manytoone parent child relationship. onetomany collection populates lazily fine. however, inverse single entity, not.

i have table of server instances, immutable.

when create list of servers, populates collection of requests server has assigned without problems.

when add new request, , select server preferred dropdown, saveorupdate, (or tried load, , get) not populate server property in request instance.

server.java

public class server {      private int serverid;     private list<request> requests;     ...     @onetomany(mappedby="server", fetch=fetchtype.lazy)     public list<request> getrequests() {       return requests;     } } 

request.java

public class request {      private int requestid;     private int server_serverid; // foreign key server.serverid     private server server;     ...     @manytoone(fetch=fetchtype.lazy)     @joincolumn(name="server_serverid", nullable=false, updatable=false, insertable=false}     @foreignkey(name="server_serverid", inversename="serverid") // don't think     public server getserver() {       return server;     } } 

add.jsp (add request form)

...  <form:select id="preferred-server" path="server.serverid">     <c:foreach items="${servers}" var="server">         <form:option value="${server.serverid}">${server.servername}</form:option>     </c:foreach> </form:select>  ... 

addrequestcontroller.java

public class addrequestcontroller extends simpleformcontroller {   ...   @override   protected modelandview onsubmit(object command) throws exception {      request request = (request)command;      try {         logger.info("before save, request.server = " + request.getserver());     } catch (nullpointerexception npe) {         logger.error("onsubmit() caught npe: " + npe);     }      // rather not these next 2 lines.  prefer saveorupdate     // request, , have populate server property via server_serverid foreign key.     //server server = serverdao.loadbyserverid(request.getserver_serverid());     //request.setserver(server);     //added instead, calls gethibernatetemplate().refresh(server, lockmode.read)     serverdao.refreshserver(request.getserver());      requestdao.addrequest(request); // calls gethibernatetemplate.saveorupdate(request)      try {         logger.info("after save, request.server = " + request.getserver());     } catch (nullpointerexception npe) {         logger.error("onsubmit() caught npe: " + npe);     }              return new modelandview(getsuccessview(), "request", request);   } } 

i've tried virtually every combination of annotation mapping find online, , setup works fetching collection of requests.

now, of course, can request command object simpleformcontroller, load server object based on user selects, , persist way--but that's not point of relationship mapping, it?

any suggestions? let me know if require other code.

using: spring 2.5, hibernate 3.2.5, sybase db

the problem request owning side, need add server request, i.e. call setserver(). server field 1 responsible corresponding column in database.

it not sufficient add request list since inverse mapping. if you'd set server in request , reload server db, request should automatically added list (although you'd not manually add server list well).

thus request should this:

public class request {   private int requestid;  //i don't see need  //private int server_serverid; // foreign key server.serverid  private server server;  ...  @manytoone ( fetch=fetchtype.lazy ) //employ lazy loading, can put on @onetomany  @joincolumn( name="server_serverid", nullable=false }  public server getserver() {   return server;  } } 

Comments