Saving an XML document in a database (a combination of Hibernate and JAXB) in Java

I am looking for a solution to save an XML file in a database using Hibernate.

The problem is that the structure of the XML file is different from Hibernate-beans.

I am trying to use JAXB to serialize XML content in Hibernate beans.

Imagine the following scenario: There is this xml file:

<root>    
    <general>
        <property1/>          
        <property2/>
    </general>
    <details>
        <detail1>
        <detail2>
</root>

Now I want to save property1 and detail1 in one bean:

@Entity
@Table(name = "tablename")
class Bean(){
    public String property;
    public String detail;

    //+ getters and  setters ...

}

Does anyone have an idea which JAXB annotations I could use to solve this problem?

+3
source share
3 answers

? Hibernate - API Persistence, , , XML . . , ( SQL API- Criteria), , - .

JAXB - , XML, XSD-Schema, , .

XML , XML, , XML, ​​ eXist, XML- XML- (XSLT, XQuery, XPath).

+1

, .

XML CLOB XML- ( clob)

LOB string byte [] ( XML-) .

, , , /unmarshal bean XML ... /; , .

.

+1

, , hibernate XStream xstream, XStreamAlias ​​("") xml xstream.fromXML(), beans, beans

@XStreamAlias("task")
public class Task {

    @XStreamOmitField
    private Long id;

    @XStreamAlias("subject-type")
    private String subject;

    @XStreamAlias("body")
    private String body;

    @XStreamAlias("frame")
    private String timeframe;

    @XStreamAlias("due-at")
    private String due;

    @XStreamAlias("alert-at")
    private String alarm;


    /** Getters/Setters **/
}


<?xml version="1.0"?>
<tasks>
    <task>
        <subject-type></subject-type>
        <body>A task for today</body>
        <frame>today</frame>
        <due-at type="datetime"></due-at>
        <alert-at type="datetime"></alert-at>
    </task>
</tasks>


// Test Case
        File xml = new File("xmlfile.xml");

        XStream xstream = new XStream();

        xstream.processAnnotations(new Class[]{ Task.class });
        xstream.alias("tasks", ArrayList.class);


    List tasks = (List)xstream.fromXML(new FileReader(xml));
+1

Source: https://habr.com/ru/post/1705029/


All Articles