сохранить временный экземпляр перед сбросом при сохранении дочернего объекта - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь сохранить требуемый объект, у которого есть 1 первичный ключ 2 родительских объекта (тип / пользователь). ошибка:

HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: jpa.project.model.DemUser; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: jpa.project.model.DemUser

запрос:

@Id
@SequenceGenerator(name="DEM_DEMANDE_IDDEMANDE_GENERATOR", sequenceName="SEQ_DEM_DEMANDE")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="DEM_DEMANDE_IDDEMANDE_GENERATOR")
@Column(name="ID_DEMANDE")
private long idDemande;

	@ManyToOne
	@JoinColumn(name="ID_TYPE_DEMANDE")
	private DemTypeDemande demTypeDemande;

	@ManyToOne
	@JoinColumn(name="ID_DEM_USER")
	private DemUser userDemande;

пользователь:

	@Id
	@SequenceGenerator(name="DEM_USER_IDUSER_GENERATOR", sequenceName="SEQ_DEM_USER")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="DEM_USER_IDUSER_GENERATOR")
	@Column(name="ID_USER")
	private long idUser;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="ID_ROLE")
	private DemRole idRole;

	@Column(name="NAME_USER")
	private String nameUser;

	private String password;

	@OneToMany(mappedBy="userDemande")
	private List<DemDemande> demDemandes;
требуемый тип:

	@Id
	@SequenceGenerator(name="DEM_TYPE_DEMANDE_IDTYPEDEMANDE_GENERATOR", sequenceName="SEQ_DEM_TYPE_DEMANDE")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="DEM_TYPE_DEMANDE_IDTYPEDEMANDE_GENERATOR")
	@Column(name="ID_TYPE_DEMANDE")
	private long idTypeDemande;

	@Column(name="LIB_TYPE_DEMANDE")
	private String libTypeDemande;

	@OneToMany(mappedBy="demTypeDemande")
	private List<DemDemande> demDemandes;
контроллер:

@Controller
public class DemandeController {
	@Autowired
ProjectService service ;
	
	@RequestMapping(value = "/demandes/manage",method = RequestMethod.GET)
	public String manageUsers(HttpServletRequest request,Model model) throws IOException {		
//----set types demande list
	   List<DemTypeDemande> listTypeDemandes = service.getTypeDemandes();
	   model.addAttribute("listTypeDemandes", listTypeDemandes); 				  
//----retrieve connected  user
	    String ConnectedUsername = service.getConnectedUsername(request);	   
	    DemUser currentUser = service.getUserByUsername(ConnectedUsername);
        model.addAttribute("demUser", currentUser); 
   

     //add demande object  
      DemDemande demande = new DemDemande();
	  model.addAttribute("DemDemande", demande); 
	  
		return "managedemandes";
	}
		
	@RequestMapping(value = "/demandes/actionadddemande", method = RequestMethod.POST)
	public String actionadduser(HttpServletRequest request 
			,@ModelAttribute ("demTypeDemande") DemTypeDemande typeDemande,@ModelAttribute ("demUser")DemUser currentUser,
             @ModelAttribute ("DemDemande") DemDemande demande , BindingResult result) {

demande.setDemUser(currentUser);      demande.setDemTypeDemande(service.getTypeDemande(Long.valueOf(request.getParameter("demTypeDemande"))));

service.addDemande(demande);
 currentUser.addDemDemande(demande)	;
 

		return "redirect:/demandes/manage";
	}
	
}
JSP:

    <div align="center">	    
        <h1>New Demande</h1>
        <form:form action="actionadddemande" method="POST" commandName="DemDemande">
        <table>
                    <form:hidden path="idDemande" />
                     <form:hidden path="demUser"  />          
     			<tr>
				<td>Types :</td>
				<td>
  <form:select path="demTypeDemande">
         <form:options items="${listTypeDemandes}"  itemValue="idTypeDemande" itemLabel="libTypeDemande"></form:options>
    </form:select></td>
</tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="Save"></td>
            </tr>
        </table>
        </form:form>
        </div>
...