我项目使用SSH。Hibernate用的是3.2,有用到注解。有个PO类 对应数据库中的表。
public class Tsysmenu2 implements  Serializable{
private static final long serialVersionUID = -1L;
/**
 *主键 菜单ID
 */
protected Integer  tsysmenuid;// //字段名称: 菜单ID protected Integer  parentid;  //字段名称: 父菜单ID
protected String  name;  //字段名称: 菜单名称
protected String  accessurl;  //字段名称: 资源URL
protected Integer  indexno;  //字段名称: 显示顺序
protected String  rightvalue;  //字段名称: 权限字符串         @Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "Tsysmenu2")
@TableGenerator(
name = "Tsysmenu2",
table = "tsyscounter",
pkColumnName = "tablekey",
valueColumnName = "countvalue",
pkColumnValue = "Tsysmenu",
allocationSize = 1
)
public Integer getTsysmenuid () {
return tsysmenuid;
}
public void setTsysmenuid(Integer tsysmenuid) {
this.tsysmenuid = tsysmenuid;
}
/**
 * @return 返回 parentid,父菜单ID
 */ public Integer getParentid () {
return parentid;
} /**
 * @param parentid 
 */
public void setParentid(Integer parentid) {
this.parentid = parentid;
}
/**
 * @return 返回 name,菜单名称
 */
@Column(length=50)
public String getName () {
return name;
} /**
 * @param name 
 */
public void setName(String name) {
this.name = name;
}
/**
 * @return 返回 accessurl,资源URL
 */
@Column(length=50)
public String getAccessurl () {
return accessurl;
} /**
 * @param accessurl 
 */
public void setAccessurl(String accessurl) {
this.accessurl = accessurl;
}
/**
 * @return 返回 indexno,显示顺序
 */ public Integer getIndexno () {
return indexno;
} /**
 * @param indexno 
 */
public void setIndexno(Integer indexno) {
this.indexno = indexno;
}
/**
 * @return 返回 rightvalue,权限字符串
 */
@Column(length=30)
public String getRightvalue () {
return rightvalue;
} /**
 * @param rightvalue 
 */
public void setRightvalue(String rightvalue) {
this.rightvalue = rightvalue;
}当我需要往里面添加非数据库字段的属性的时候,应该怎么做呢? 我直接添加属性的时候,会报错如下:
 Could not determine type for: java.util.List, for columns: [org.hibernate.mapping.Column(rightNameList)]
我要添加一个List类型的属性。应该如何写?

解决方案 »

  1.   

    通常用的是Set而不是List。private Set<FilesBasic> filesbasics=new HashSet<FilesBasic>(0); @OneToMany(cascade={ CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST}, fetch = FetchType.LAZY, mappedBy = "supplyCompany")
    public Set<FilesBasic> getFilesbasics() {
    return filesbasics;
    } public void setFilesbasics(Set<FilesBasic> filesbasics) {
    this.filesbasics = filesbasics;
    }
      

  2.   

    这个是单端的配置。
    多端的配置如下:private SupplyCompany supplyCompany;@ManyToOne(cascade={ CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST })
    @JoinColumn(name = "SUPPLYCOMPANY_ID")
    public SupplyCompany getSupplyCompany() {
    return supplyCompany;
    } public void setSupplyCompany(SupplyCompany supplyCompany) {
    this.supplyCompany = supplyCompany;
    }
      

  3.   

    不好意思。没看清你下面的文字说明。
    你的这个实体类是映射到数据库的,里面的属性应该不能有不对应数据库表字段的。如果你想另加属性(不太清楚你另加属性是出于什么需求),可以放到其他调用这个实体类的类中,如:放到Action中。
      

  4.   

    liuyuhua0066
    请问: 如何放到调用的Action里?如果可以添加属性 那么我的JSP页面可以${PO.属性名} 这样。如果照你说的添加到Action里,和这个PO怎么关联起来呢?暂时我没什么思路。。
      

  5.   

    说明一下 。因为我是需要做一个Menu2类型的List,在JSP页面遍历。但是这个Menu2类型就是数据库映射的PO。如果这个PO不允许添加自己的属性的话,那我就很麻烦了。我现在的想法是做个BO。把PO的属性拷贝过来 再添加自己的属性。还有更好的解决方法吗?如果Hibernate那边能添加是最好了。
      

  6.   

    你可以去看下hibernate的自身一对多功能。
      

  7.   

    楼主可以用方法代替啊!属性确是对应数据库的字段。hibernate会检查的。
      

  8.   

    不需要持久的数据要用@Transient注释掉