Я использую JPA2 с hibernate в качестве провайдера в среде java ee6.
У меня есть отношение один ко многим, и когда я получаю все строки для одной стороны для отображения на странице JSF, я хочу отобразить некоторые свойства многих сторон, ** но не все **, и даже избегать их загрузки. свойства их при заполнении многих сторонних объектов
и я не уверен, как это сделать.
вот фрагмент
Я хочу получить все строки для таблицы A и отобразить их в таблице jsf,
при отображении строк для таблицы A я также хочу отобразить некоторые свойства
из таблицы B в той же таблице JSF, и в идеале даже не извлекать / хранить неиспользованные
свойства из таблицы B
TBL_A
________________
int ID
varchar FIRSTNAME
varchar LASTNAME
а второй
TBL_B
___________
int ID
varchar VERSION // display on jsf page
varchar XML_DATA //large, don't want to load when getting results for A/B join
int A_ID
и мой связанный с JPA2 класс похож на
@Entity
@Table(name = "TBL_A")
@NamedQueries // not sure what sql to create to accomplish this?
({ @NamedQuery(name = "A_and_B.findAll", query = "SELECT a FROM EntityA a") })
public class EntityA implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@NotNull
@Column(name = "ID", nullable = false)
private Integer id;
.
@Column(name = "FIRSTNAME")
private String firstname;
.
@Column(name = "LASTNAME")
private String lastname;
.
@OneToMany(mappedBy = "entityA", fetch = FetchType.EAGER)
private List<EntityB> entityBList;
и мой связанный с TBL_B объект -
@Entity
@Table(name = "TBL_B")
public class EntityB implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@NotNull
@Column(name = "ID", nullable = false)
private Integer id;
.
@Column(name = "VERSION")
private String version;
.
@Column(name = "XML_DATA")
private String xmlData;
.
@JoinColumn(name = "A_ID", referencedColumnName = "ID")
@ManyToOne
private EntityA entityA;
У меня есть страница JSF, на которой отображается таблица данных / список записей TBL_A, а также
столбец VERSION из TBL_B, при получении всех строк для TBL_A.
Мне пришлось использовать тип извлечения EAGER, чтобы избежать ошибки отложенной медленной инициации
сделать это. надеюсь, что это правильный путь.
при загрузке всех сущностей TBL_B, я полагаю, я не против загружать все строки TBL_B в entityBList, но я не хочу, чтобы список бинов EntityB имел загруженное свойство xmlData, потому что оно значительно велико.
Может кто-нибудь объяснить, как я могу это сделать?
как я могу сделать это с помощью моего именованного запроса
public List<EntityA> findAll_A_Entities()
{
return em.createNamedQuery("A_and_B.findAll", EntityA.class).getResultList();
}