D'abord, quelques précisions pour KLE's réponse:
Sans contrainte (nullable) one-to-one de l'association est la seule qui ne peut pas être mandatées sans instrumentation du bytecode. La raison pour cela est que le propriétaire de l'entité DOIT savoir si le patrimoine de l'association doit contenir un objet proxy ou NULLE et il ne peut pas déterminer qu'en regardant sa base de colonnes du tableau en raison de l'un-à-un, normalement, être mappés sur les mêmes PK, de sorte qu'il a d'être avec impatience extraites de toute façon faire des proxy inutile. Voici une plus détaillée de l' explication.
plusieurs-à-un les associations (et un-à-plusieurs, évidemment) ne souffrent pas de ce problème. Propriétaire entité peut facilement vérifier ses propres FK (et dans le cas d'un-à-plusieurs, vide de collecte de proxy est créé d'abord et rempli sur demande), afin que l'association puisse être paresseux.
Le remplacement de l'un-à-un à un-à-plusieurs est presque jamais une bonne idée. Vous pouvez le remplacer avec de l'unique plusieurs-à-un, mais il y a d'autres (peut-être mieux).
Rob H. a un point, cependant vous ne pouvez pas être en mesure de la mettre en œuvre en fonction de votre modèle (par exemple, si votre one-to-one de l'association est nullable).
Maintenant, autant que la question de départ est:
A) @ManyToOne(fetch=FetchType.LAZY)
devrait fonctionner parfaitement. Êtes-vous sûr que c'est de ne pas être écrasé dans la requête elle-même? Il est possible de spécifier join fetch
dans les requêtes HQL et / ou de définir explicitement mode de lecture via les API des Critères qui auraient préséance sur la classe d'annotation. Si ce n'est pas le cas et que vous rencontrez toujours des problèmes, veuillez poster vos classes, de la requête et résultant SQL pour plus de la conversation.
B) @OneToOne est plus délicat. Si ce n'est certainement pas les valeurs null, aller avec Rob H. de la suggestion et de le définir en tant que tel:
@OneToOne(optional = false, fetch = FetchType.LAZY)
Sinon, si vous pouvez modifier votre base de données (ajout d'une colonne de clé étrangère pour le propriétaire de la table), le faire et le mapper comme "rejoint":
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="other_entity_fk")
public OtherEntity getOther()
et dans OtherEntity:
@OneToOne(mappedBy = "other")
public OwnerEntity getOwner()
Si vous ne pouvez pas le faire (et ne peut pas vivre avec le chargement agressif) instrumentation du bytecode est votre seule option. Je suis d'accord avec CPerkins, cependant - si vous avez 80!!! les jointures en raison avides de OneToOne associations, vous avez plus de problèmes alors :-)