Как сопоставить столбец json в файле сопоставления гибернации?

#java #json #hibernate #jpa #hibernate-mapping

Вопрос:

Я пытаюсь следить за этим блогом о том, как отобразить json в режим гибернации : https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types. В нем не говорится, как создать файл отображения спящего режима (.hbm.xml).

Как мне это сделать?

Я пробовал что-то подобное, но это не работает :

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.orange.model">
    <class name="Test_json" table="product_json">
        <id name="id" column="id">
            <generator class="increment"/>
        </id>
        <property name="jdoc" column="json" type="json" />
    </class>
</hibernate-mapping>
 

Классы java являются :

 // package and imports omitted

@XmlRootElement
@Entity
@Table(name="product_json")
@TypeDef(name = "json", typeClass = JsonType.class)
public class Test_json {
    
    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    private int id;

    @Type(type = "json")
    @Column(name="json", columnDefinition ="json")
    private Jdoc jdoc;
    
    // getters and setters omitted
}
 

и

 // package omitted

public class Jdoc {
    private int idprod;
    private String nameprod;
    private String description;

    // getters and setters omitted
}
 

Нужно ли мне создавать файл отображения гибернации для класса Jdoc? Если да, то как мне связать его с отображением Test_jdoc?

Заранее спасибо за вашу помощь.

Ответ №1:

Благодаря владмихальче я смог понять.
Забудьте о файлах отображения гибернации.

Сделайте сопоставление аннотаций JPA !

Мое решение моей проблемы :
Вместо добавления вашего класса с <mapping resource="Test_json.hbm.xml" /> .
Добавьте свой класс с кодом при создании SessionFactory :

 sessionFactory = new MetadataSources( registry )
                .addAnnotatedClass(Test_json.class)
                .buildMetadata().buildSessionFactory();