Hibernate: @ManyToOne (fetch = FetchType.LAZY) ne fonctionne pas sur une colonne référencée par une clé non-primaire
J'ai 2 tables: Order [OrderId(PK), OrderShipmentCode, ...]
et Shipment[ShipmentId(PK), ShipmentCode, ...]
.
Dans Order
classe, j'ai déclaré shipment
champ comme suit:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OrderShipmentCode", referencedColumnName = "ShipmentCode", insertable = false, updatable = false, nullable = false)
private Shipment shipment;
Quand je reçois la liste des Order
le Shipment
est également chargé (j'ai vu un grand nombre de requêtes SELECT). Mais je veux le Shipment
être paresseux chargé, de ne pas être récupérée avec Order
.
Pour les autres tables, si référencé dans la colonne de clé primaire, puis les résultats sont comme prévu (Lazy-loading est utilisé). Dans mon cas, ShipmentCode
n'est pas la Clé Primaire de Shipment
table, et paresseux-chargement n'est pas utilisé par Hibernate.
Pourriez-vous me montrer comment atteindre cet objectif?
EDIT:
Le code de Requête est comme ci-dessous:
Criteria criteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Order.class);
List result = criteria.list();
Requêtes SQL sont les suivantes: 1 instruction SELECT pour Order
table et un tas d'instruction SELECT pour Shipment
source d'informationauteur Thomas Lee
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier
optional = false
:ou tout simplement de le transformer en un
@ManyToOne
:Essayez ceci: