2017-09-11 1 views
2

내 개체를 저장하려면 ObjectDB을 사용하고 있습니다. 그러나 객체가 내 패키지 (라이브러리에서) 외부에서 만들어지고 전체 라이브러리를 내 프로젝트에 복제하지 않고 주석 만 추가하기 때문에 @Entity 태그로 주석을 추가하지 않은 객체를 저장하려고합니다. 이것은 내가 지속 할 클래스입니다 :JPA에서 @Entity 태그로 주석을 달지 않은 클래스의 객체를 유지하는 방법은 무엇입니까?

package org.telegram.telegrambots.api.objects; 

import com.fasterxml.jackson.annotation.JsonProperty; 

import org.telegram.telegrambots.api.interfaces.BotApiObject; 

/** 
* @author Ruben Bermudez 
* @version 3.0 
* This object represents a Telegram user or bot. 
*/ 
public class User implements BotApiObject { 

    private static final String ID_FIELD = "id"; 
    private static final String FIRSTNAME_FIELD = "first_name"; 
    private static final String ISBOT_FIELD = "is_bot"; 
    private static final String LASTNAME_FIELD = "last_name"; 
    private static final String USERNAME_FIELD = "username"; 
    private static final String LANGUAGECODE_FIELD = "language_code"; 

    @JsonProperty(ID_FIELD) 
    private Integer id; ///< Unique identifier for this user or bot 
    @JsonProperty(FIRSTNAME_FIELD) 
    private String firstName; ///< User‘s or bot’s first name 
    @JsonProperty(ISBOT_FIELD) 
    private Boolean isBot; ///< True, if this user is a bot 
    @JsonProperty(LASTNAME_FIELD) 
    private String lastName; ///< Optional. User‘s or bot’s last name 
    @JsonProperty(USERNAME_FIELD) 
    private String userName; ///< Optional. User‘s or bot’s username 
    @JsonProperty(LANGUAGECODE_FIELD) 
    private String languageCode; ///< Optional. IETF language tag of the user's language 

    public User() { 
     super(); 
    } 

    public Integer getId() { 
     return id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public String getLanguageCode() { 
     return languageCode; 
    } 

    public Boolean getBot() { 
     return isBot; 
    } 

    @Override 
    public String toString() { 
     return "User{" + 
       "id=" + id + 
       ", firstName='" + firstName + '\'' + 
       ", isBot=" + isBot + 
       ", lastName='" + lastName + '\'' + 
       ", userName='" + userName + '\'' + 
       ", languageCode='" + languageCode + '\'' + 
       '}'; 
    } 
} 

을 그리고 그것은 중요한 아무것도 없다하더라도이는 BotApiObject 클래스 :

package org.telegram.telegrambots.api.interfaces; 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
import com.fasterxml.jackson.annotation.JsonInclude; 

import java.io.Serializable; 

/** 
* @author Ruben Bermudez 
* @version 1.0 
* An object from the Bots API received from Telegram Servers 
*/ 
@JsonIgnoreProperties(ignoreUnknown = true) 
@JsonInclude(JsonInclude.Include.NON_NULL) 
public interface BotApiObject extends Serializable { 
} 

내가이 클래스의 복제를 만들 수 있다는 것을 알고, 그것을 주석을 @Entity으로 바꾸고 어댑터를 사용하여 변환하십시오. 그러나 이것은 낭비입니다. 내가 주석을 달지 않은 클래스를 유지/읽기/수행하는 더 좋은 방법이 있는지 알고 싶습니다.

+1

당신이 "지속"라고, 계속 :

는 예를 들어, META-INF/orm.xml 파일을 추가? RDBMS에서 annot없이 JPA를 사용하거나 클래스를 엔티티로 정의하는'orm.xml '을 사용할 수 없습니다. 어떤 클래스가 엔티티인지를 정의하는'orm.xml' 파일을 사용하여 클래스 자체를 건드리지 않고도 할 수 있으며 기본 JPA가 적용됩니다 – DN1

+0

@ DN1 감사합니다! 나는 정말로 XML 파일 옵션이 존재한다는 사실에 주목하지 않았다. –

+0

그냥 "META-INF"에 넣고 JPA 사양 – DN1

답변

2

주석에서 제안 된 DN1은 JPA 주석 대신 orm.xml 파일을 사용할 수 있습니다. 모든 JPA 주석에는 XML 대체가 있습니다.

<?xml version="1.0" encoding="UTF-8" ?> 
 

 
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" version="2.0"> 
 

 
\t <entity class="org.telegram.telegrambots.api.objects.User" metadata-complete="true" /> 
 

 
</entity-mappings>

+0

ObjectDB에서 가능합니까? xml 파일을로드하도록 라이브러리에 알리는 방법은 무엇입니까? 자동로드합니까? –

+0

META-INF/orm.xml에있는 경우 자동으로로드해야합니다 (모든 JPA 구현에 따라 ObjectDB가 아니라). – ObjectDB

0

하나의 옵션은 JSON 프레임 워크를 사용하여 개체를 JSON으로 마샬링하고이를 유지하는 것입니다. 그런 다음 동일한 프레임 워크를 사용하여 JSON을 객체로 역 마샬링합니다. 객체가 모든 필드를 final로 설정 했으므로 인스턴스를 만들려면 일부 Reflection 기반 프레임 워크를 사용해야합니다.

관련 문제