0

하나의 UserDetails와 다른 UserRoles 테이블이 있습니다. 다음과 같은 방법으로 매핑했습니다. 이 삽입 작업을 잘 갔다지만 사용자 개체에서 역할 목록을 얻으려고하면 예외가 throw됩니다. 내가 밝힌 바에 따르면, Hibernate에 의해 생성 된 SQL은 whare 절에서 User_id로 USERCODE 컬럼을 갖는다. 이 문제를 극복하는 방법. 도와주세요.테이블에 일대 다 관계가있는 경우 유창한 nhibernate로 잘못된 SQL이 생성됩니다.

사용자 클래스 :

public virtual string Code { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual string MiddleName { get; set; } 
    ....... 
    public virtual IList<UserRole> Roles { get; set; } 
    public virtual IList<UserResource> Resources { get; set; } 

사용자 맵 :

Table("USER_DETAILS"); 
     Schema("PROJECTDOCS"); 
     Id(x => x.Code).Column("CODE").GeneratedBy.Assigned(); 
     Map(x => x.FirstName).Column("FIRSTNAME").Not.Nullable().Length(100); 
     Map(x => x.LastName).Column("LASTNAME").Length(100).Not.Nullable(); 
     Map(x => x.MiddleName).Column("MIDDLENAME").Length(100); 
     ... 
     HasMany(x => x.Roles).Inverse().Cascade.All(); 

UserRole 등급 :

public virtual long UserRoleID { get; set; } 
    public virtual User UserCode { get; set; } 
    public virtual long RoleID { get; set; } 
    public virtual string CreatedBy { get; set; } 
    public virtual DateTime CreatedDate { get; set; } 
    public virtual string UpdatedBy { get; set; } 
    public virtual DateTime UpdatedDate { get; set; } 

UserRole지도 :

Table("USER_ROLES"); 
     Schema("PROJECTDOCS"); 
     Id(x => x.UserRoleID).Column("URID").GeneratedBy.Increment(); 
     Map(x => x.RoleID).Column("ROLEID").Not.Nullable(); 
     Map(x => x.CreatedBy).Column("CREATEDBY").Not.Nullable().Length(36); 
     Map(x => x.CreatedDate).Column("CREATEDDATE").Not.Nullable().Default(DateTime.Now.ToString()); 
     Map(x => x.UpdatedBy).Column("UPDATEDBY").Not.Nullable().Length(36); 
     Map(x => x.UpdatedDate).Column("UPDATEDDATE").Not.Nullable().Default(DateTime.Now.ToString()); 
     References(x => x.UserCode).Column("USERCODE");   
최종 SQL 생성 0

이었다 :

[SQL은 : CREATEDBY2_0_, roles0_ 같은 User8_1_, roles0_.URID URID1_로서 roles0_.URID URID2_0_로서 roles0_.ROLEID ROLEID2_0_로서 roles0_.CREATEDBY로 roles0_.User_id을 선택한다. USERCODE2_0_로 CREATEDD4_2_0_, UPDATEDBY2_0_ 같은 roles0_.UPDATEDBY, UPDATEDD6_2_0_ 같은 roles0_.UPDATEDDATE, roles0_.USERCODE로 CREATEDDATE PROJECTDOCS.USER_ROLES roles0_ WHERE roles0_.User_id =?]

굵게 표시된 열 이름은 무엇을하려고 worng FROM . 사전에

감사합니다, 프라 딥 당신이 당신의에서는 UserClass에서 UserRoles에 hasMany의의 키 열을 누락 것 같습니다

답변

0

. 이 작업을 수행해야합니다.

HasMany(x => x.Roles).KeyColumn("URID").Inverse().Cascade.All(); 
관련 문제