Hibernate самостоятельное создание столбцов в базе данных

У меня проблема с тем, что спящий режим сам создает два новых столбца в базе данных.

В таблице есть столбец orderId, и спящий режим решает создать еще один - order_id.

Я изменил свойство в файле hibernate.cfg на «проверить», а не «обновить», но это не помогло.

Эта проблема создает ошибку «дублирования ключа», даже если запись все еще находится в самой базе данных.

Вот код, в котором возникает проблема -

<body>
<h1>Your cart</h1>
<form action="/order_placed" method="get">
    <table id="table">
        <tr>
            <th>Product ID</th>
            <th>Name</th>
            <th>Brand</th>
            <th>Rating</th>
            <th>Price</th>
            <th>quantity</th>

        <tr th:each="product : ${checkout}">
            <td th:text="${product.productId}"></td>
            <td th:text="${product.productName}"></td>
            <td th:text="${product.brand}"></td>
            <td th:text="${product.rating}"></td>
            <td th:text="${product.price}"></td>
            <td><input type="text" placeholder="insert quantity" id="quantity" required></td></tr>
    </table>
    <br><br>
    <input type="text" id="notes" name="customernotes" placeholder="Enter notes here...">
    <br><br>
    <span id="sum" style="font-size: larger"></span>
    <script>
        var table = document.getElementById("table"), sumVal = 0;
        for (var i = 1; i < table.rows.length; i++) {
            sumVal += parseInt(table.rows[i].cells[4].innerHTML);
        }
        document.getElementById("sum").innerHTML = "Total payment sum =" + sumVal;
    </script>
    <br><br>
    <button class="button button1" id="btn" type="submit" onclick="myfunction()">Place your order</button>
    <br><br>
    <script>
        function myfunction() {
            var tsum = document.getElementById("sum").innerHTML.split("=")[1];
            var cnotes = document.getElementById("notes").value;
            var xhttp = new XMLHttpRequest();
            xhttp.open("GET","/order_placed" + '?cusnotes=' + cnotes + '&totalsum=' + tsum,true);
            xhttp.send();
        }
    </script>
</form>

Картограф -

@RequestMapping("/checkout")
    public ModelAndView checkout(@CookieValue("clientidcookie") String clientid){
        ModelAndView mav = new ModelAndView("checkout");
        Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml");
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        Session session_for_db = factory.openSession();

        ArrayList<CartEntity> carts = (ArrayList<CartEntity>)session.createQuery("from CartEntity ").list();
        ArrayList<ProductsEntity> products = (ArrayList<ProductsEntity>)session_for_db.createQuery("from ProductsEntity ").list();
        ArrayList<ProductsEntity> res = new ArrayList<ProductsEntity>();
        for(CartEntity c: carts){
            if (c.getClientId().equals(clientid)){
                for(ProductsEntity p: products){
                    if (p.getProductId().equals(c.getProductId())){
                        res.add(p);
                    }
                }
            }
        }
        mav.addObject("checkout",res);
        session.close();
        factory.close();
        return mav;
    }

Файл конфигурации гибернации =

<?xml version='1.0' encoding='utf-8'?>


<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="connection.url">jdbc:mysql://localhost:3306/theprocess?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC</property>
    <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="connection.username">root</property>
    <property name="connection.password">Amit4089</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- DB schema will be updated if needed -->
    <property name="hbm2ddl.auto">update</property>
    <mapping class="com.example.WebAppProcess20.Entities.ClientsEntity"/>
    <mapping class="com.example.WebAppProcess20.Entities.InvoicesEntity"/>
    <mapping class="com.example.WebAppProcess20.Entities.OrdersEntity"/>
    <mapping class="com.example.WebAppProcess20.Entities.OrdersitemsEntity"/>
    <mapping class="com.example.WebAppProcess20.Entities.ProductsEntity"/>
    <mapping class="com.example.WebAppProcess20.Entities.CartEntity"/>
  </session-factory>
</hibernate-configuration>

Пожалуйста, поделитесь своим файлом конфигурации гибернации.

Minar Mahmud 10.08.2018 15:30

@minarmahmud добавил файл в исходный пост.

Assaf 10.08.2018 15:31
1
2
515
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Меняем на <property name="hbm2ddl.auto">none</property>

Обновлено:

Согласно 23.14. Automatic schema generation из Hibernate 5.2 Руководство пользователя:

Значение по умолчанию для hibernate.hbm2ddl.auto - none, и при значении none никаких действий выполняться не будет.

Для этого достаточно просто удалить запись hibernate.hbm2ddl.auto из файла конфигурации.

Спасибо! однако при попытке сделать это я получаю сообщение об ошибке «none» - неизвестное свойство.

Assaf 10.08.2018 16:21

@Alan, какую версию гибернации вы используете?

Minar Mahmud 10.08.2018 16:21

5.2.17.Final - это версия

Assaf 10.08.2018 16:31

@Alan, я обновил ответ. Пожалуйста, дайте мне знать, работает ли это для вас. Спасибо

Minar Mahmud 10.08.2018 16:44

Я пытался удалить его полностью, но это тоже не сработало.

Assaf 10.08.2018 16:50

Спасибо! ваш ответ сработал, но мне просто нужно уточнить, что свойство было изменено в моем коде в файле «свойства приложения», а не в «hibernate.cfg.xml»

Assaf 11.08.2018 18:58

Другие вопросы по теме