2016-10-11 3 views
1

Мне нужно получить значение поля из другого объекта. У меня есть следующие модели:Как получить значение поля из другого объекта (Hibernate)

@Entity 
public class ProductOwnerFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String customValue; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "templateField_id") 
    private TemplateFields templateFields; 

    private int order; 
    //gettees and setters 
} 

@Entity 
public class TemplateFields{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "order_field") 
    private int order = 0; 

    @Column(name = "name") 
    private String name; 
    //gettees and setters 
} 

Как я могу получить значение поля «ORDER» из TemplateFields и установите в поле «порядок» ProductOwnerFields? Мне нужны только анонсы JPA или Hibernate, используйте EntityManager.

В целом мне нужно сделать EntityManager.find (ProductOwnerFields .class, id) и получить объект ProductOwnerFields с «порядковым» значением из «порядка» TemplateFields.

+1

Если они имеют одинаковое значение, почему вы должны их в обоих образованиях? –

+0

«Заказ» из ProductOwnerFields не будет храниться в базе данных. В будущем я буду использовать @OrderBy «заказ» уровня ProductOwnerFields для сортировки –

+0

как насчет порядка вызова TemplateFields getter в порядке ProductOwnerFields setter! – FuSsA

ответ

0

Try что-то подобное

@Entity 
public class ProductOwnerFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String customValue; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "templateField_id") 
    private TemplateFields templateFields; 

    @OneToOne(fetch = FetchType.EAGER) 
    private TemplateFields templateFields; 
} 

@Entity 
public class TemplateFields{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "order_field") 
    private int order = 0; 

    @Column(name = "name") 
    private String name; 
} 
+0

В Java у вас не может быть 2 поля в одном классе с тем же именем! Ошибка компилятора –

+0

Вы правы, мой плохой. Я быстро набираю код. – Zorglube

1

Может попробовать это:

@Entity 
public class ProductOwnerFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String customValue; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "templateField_id") 
    private TemplateFields templateFields; 

    private int order; 

    @PostLoad 
    public void postLoad() { 
     if(templateFields != null) { 
      this.order = templateFields.getOrder(); 
     } 
    } 
} 

Это может ответить на ваш вопрос, но не рекомендуется. В JPA вы можете создать CriteriaQuery и напрямую ввести критерий «порядок» критериев поиска «templateFields» типа ProductOwnerFields. Не нужно иметь поле «порядок» в ProductOwnerFields.

Вы можете просмотреть это знать, как использовать CriteriaQuery: https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

1

когда использует нетерпеливый, он состоит из загрузки объекта или коллекцию как можно скорее, Независимо от того, в дальнейшем использует их приложение или не.

Тогда вы можете получить код с помощью:

productField.getTemplateFields().getOrder() 
Смежные вопросы