Я хочу сохранить свойство в базе данных как Long, но использовать объект со вспомогательными методами в коде.Как создать настраиваемый тип отображения EJB/JPA?
Однако тип объекта - это настраиваемый тип, который имеет внутреннее значение (длинное), которое я хочу сохранить в базе данных.
public final class MyBean extends Number implements Serializable, Comparable<MyBean>
{
private long myValue;
public MyBean(Long value) { this.myValue = value; }
// Other helper methods and overrides
public MyBean valueOf(Long data)
{
return new MyBean(data);
}
@Override
public String toString()
{
return String.valueOf(myValue);
}
}
Это, как я использую его:
@Entity
@Table(name = "mybeans")
public class MyBean implements Serializable
{
private static final long serialVersionUID = 1L;
MyBean myBean;
@Id
@Column(name = "mybean", nullable = false)
public MyBean getMyBean() { return myBean; }
public void setMyBean(MyBean value) { this.myBean = value; }
}
Десериализация этот объект вызывает ToString и работает мелкие (JAX-RS/Джерси). Но когда я пытаюсь вытащить его из базы данных, используя мой EJB, ошибка я получаю:
Объект [1.427.148.028.955] класса [класс java.lang.Long], может не быть преобразован в [класс com.MyBean]
Сохранение он произвел ошибку
не удается определить тип SQL, используемый для экземпляра com.MyBean. Используйте setObject() с явным значением типа, чтобы указать тип использования.
Это имеет смысл.
Но какие методы я могу добавить к мужчине, EJB получить длинный, как значение, и использовать длинный, чтобы создать новый объект?
ОТВЕТ:
Создание класса @Embeddable и добавив следующие атрибуты работали.
@Embedded
@AttributeOverrides({
@AttributeOverride(name="value", [email protected](name="mybean"))
})
(я не добавлял EmbeddedId, потому что я добавил серийный первичный идентификатор ключа и только что сделал это столбец)
Одно предостережение в том, что она не будет работать с динамическим ткачества. Я должен был добавить
<property name="eclipselink.weaving" value="static"/>
моему persistence.xml
Удивительный! Прекрасно работает. Благодарю. Одно из предостережений в том, что мне пришлось включить Static weaving для EclipseLink. Это не понравилось динамическое ткачество. –