我有一个Hibernate的服务方法,例如:"SELECT sc FROM SecurityContact sc WHERE sc.securityId=:securityId2"。securityId2由用户传递。每个SecurityContact与一个Contact有多对一的关系,因此Hibernate在运行此查询时会自动调用联接。但是,Hibernate始终运行的联接是内部联接,因此无法正常运行。有没有办法强迫Hibernate在内部生成左外部联接?这是SecurityContact类的代码:
"SELECT sc FROM SecurityContact sc WHERE sc.securityId=:securityId2"
/** * The persistent class for the SecurityContact database table. * */ @Entity @FXClass(kind=FXClassKind.REMOTE) public class SecurityContact implements Serializable { private static final long serialVersionUID = 1L; @Transient private String uid; @FXIgnore public String getUid() { if (uid == null) { uid = "" + securityContactId; } return uid; } public void setUid(String uid) { this.uid = uid; } @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="securityContact_id") private Long securityContactId; @Column(name="security_id") private String securityId; @Column(name="create_date") private String createDate; @Column(name="create_user") private String createUser; @Column(name="modify_date") private String modifyDate; @Column(name="modify_user") private String modifyUser; //bi-directional many-to-one association to AgentContact @ManyToOne @JoinColumn(name="agent_id", referencedColumnName="contact_id") private AgentContact agentContact; //bi-directional many-to-one association to AuditContact @ManyToOne @JoinColumn(name="audit_id", referencedColumnName="contact_id") private AgentContact auditContact; public SecurityContact() { } @FXKeyColumn public Long getSecurityContactId() { return this.securityContactId; } public void setSecurityContactId(Long securityContactId) { this.securityContactId = securityContactId; } public String getSecurityId() { return this.securityId; } public void setSecurityId(String securityId) { this.securityId = securityId; } public String getCreateDate() { return this.createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } public String getCreateUser() { return this.createUser; } public void setCreateUser(String createUser) { this.createUser = createUser; } public String getModifyDate() { return this.modifyDate; } public void setModifyDate(String modifyDate) { this.modifyDate = modifyDate; } public String getModifyUser() { return this.modifyUser; } public void setModifyUser(String modifyUser) { this.modifyUser = modifyUser; } @FXManyToOne(parent="parent", property="contactId") public AgentContact getAgentContact() { return this.agentContact; } public void setAgentContact(AgentContact agentContact) { this.agentContact = agentContact; } @FXManyToOne(parent="parent", property="contactId") public AgentContact getAuditContact() { return this.auditContact; } public void setAuditContact(AgentContact auditContact) { this.auditContact = auditContact; } }
尝试fetch=select多对一匹配
fetch=select
另请参见http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies和http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html