Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create table ingredient(ingredient_id number(4) primary key,
- quantity varchar2(20),
- ingredient varchar2(40));
- create table recipe(id number primary key,
- name varchar2(25) unique,
- ingredient_id number(4),
- constraint ingredient_fk foreign key(ingredient_id)
- references ingredient(ingredient_id));
- @Entity
- @Table(name = "ingredient")
- public class Ingredient implements Serializable {
- private static final long serialVersionUID = -2489479702169761646L;
- @Id
- @Column(name = "ingredient_id")
- private Integer id;
- @Column(name = "quantity")
- private String quantity;
- @Column(name = "ingredient")
- private String ingredient;
- //getter and setters
- }
- @Entity
- @Table(name = "recipe")
- public class Recipe implements Serializable {
- private static final long serialVersionUID = 4398676897855994030L;
- @Id
- @Column(name = "id")
- private Integer id;
- @Column(name = "name")
- private String name;
- @OneToMany(cascade=CascadeType.ALL)
- @JoinColumn(name = "ingredient_id")
- private List<Ingredient> ingredients;
- //getters and setter
- }
- @RequestMapping("/add")
- public String newRecipe(Model model) {
- Recipe recipe = new Recipe();
- recipe.setIngredients(new AutoPopulatingList<Ingredient>(Ingredient.class));
- model.addAttribute("recipe", recipe);
- return "recipes/new";
- }
- @RequestMapping(value = "add", method = RequestMethod.POST)
- public String addRecipe(@Valid Recipe recipe, BindingResult result,
- Model model) {
- if (result.hasErrors()) {
- return "recipes/new";
- }
- recipeServices.addRecipe(recipe);
- return "redirect:/recipe/" + recipe.getId();
- }
- <html>
- <script type="text/javascript">
- <!--
- function addRow(tableID) {
- var table = document.getElementById(tableID);
- var rowCount = table.rows.length;
- var row = table.insertRow(rowCount);
- var cell1 = row.insertCell(0);
- var element1 = document.createElement("input");
- element1.type = "checkbox";
- element1.name = "chkbox[]";
- cell1.appendChild(element1);
- var length = rowCount - 1;
- var cell2 = row.insertCell(1);
- var element2 = document.createElement("input");
- element2.type = "text";
- element2.name = "ingredients[" + length + "].quantity";
- cell2.appendChild(element2);
- var cell3 = row.insertCell(2);
- var element3 = document.createElement("input");
- element3.type = "text";
- element3.name = "ingredients[" + length + "].ingredient";
- cell3.appendChild(element3);
- var cell4 = row.insertCell(3);
- var element4 = document.createElement("input");
- element4.type = "text";
- element4.name = "ingredients[" + length + "].comments";
- cell4.appendChild(element4);
- }
- function deleteRow(tableID) {
- try {
- var table = document.getElementById(tableID);
- var rowCount = table.rows.length;
- for (var i = 0; i < rowCount; i++) {
- var row = table.rows[i];
- var chkbox = row.cells[0].childNodes[0];
- if (null != chkbox && true == chkbox.checked) {
- table.deleteRow(i);
- rowCount--;
- i--;
- }
- }
- } catch (e) {
- alert(e);
- }
- }
- -->
- </script>
- </head>
- <body>
- <s:url value="/recipe/add" var="recipe_new" />
- <sf:form modelAttribute="recipe" action="${recipe_new}" method="POST">
- <table>
- <tr>
- <th align="left" valign="middle">Recipe Name:</th>
- <td colspan="2"><sf:input path="name" id="recipeName" /> <br />
- <sf:errors path="name" cssClass="error" /></td>
- </tr>
- <tr>
- <td>
- <h3>Ingredients</h3> <INPUT type="button" value="+"
- onclick="addRow('dataTable')" /> <INPUT type="button" value="-"
- onclick="deleteRow('dataTable')" />
- <table id="dataTable" width="350px" border="1">
- <tr>
- <th></th>
- <th>Quantity</th>
- <th>Ingredient</th>
- </tr>
- <tr>
- <td><input type="checkbox" name="chk" /></td>
- <td><sf:input type="text" path="ingredients[0].quantity"
- title="Quantity" placeholder="Quantity" /></td>
- <td><sf:input type="text" path="ingredients[0].ingredient"
- title="Ingredient" placeholder="Ingredient" /></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </sf:form>
- </body>
- </html>
- Exception: could not retrieve snapshot: [com.sandeep.recipe.tables.Ingredient#42]
- org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
- org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
- org.hibernate.persister.entity.AbstractEntityPersister.getDatabaseSnapshot(AbstractEntityPersister.java:1137)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement