0

次の Hibernate オブジェクトを実装しています。

@Entity
@Table(name = "imageviewer_crvariable")
public class CRVariable implements Serializable   {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
@Column(name = "VarId")
private Long varId;

@Column(name = "VarName")
private String varName;

@Column(name = "VarDescription")
private String varDescription;

@ManyToMany(mappedBy="crvariables")
private Set<CRImageType> crimagetypes = new HashSet<CRImageType>();

public CRVariable(){
}

public CRVariable(Long varId,String varName, String varDescription){
    this.varId=varId;
    this.varName=varName;
    this.varDescription=varDescription;
}

//getters and setters 

また、バック Bean によって管理される primefaces ピックリスト コンポーネントもあります。次のように、(リスト項目がソースからターゲットに転送された後) 新しいピックリスト値で休止状態オブジェクト (CRVariable) を更新するメソッド「setAssocImTypeVariables」を実装しました。

public void setAssocImTypVariables() {      
    dualListVars = getDualListVars();       
    List<CRVariable> sourceVariables = dualListVars.getSource();
    List<CRVariable> targetVariables = dualListVars.getTarget();

    for (int i=0; i<sourceVariables.size(); i++) {
        System.out.println(">>>>>>>>>>>>> I am a source variable: " + sourceVariables.get(i));
    }

    for (int i=0; i<targetVariables.size(); i++) {
        System.out.println(">>>>>>>>>>>>> I am a target variable: " + targetVariables.get(i));
    }

    CRImageType selectedImageType = getSelectedCRImageType();
    Long selImTypeId = selectedImageType.getImTypeId();

このコードは正常に動作し、コンソールに表示される結果は次のとおりです。

>>>>>>>>>>>>> I am a source variable: varId : 75, varName : Ki67(X), varDescription : Ki67(X)
>>>>>>>>>>>>> I am a source variable: varId : 76, varName : PTEN(X), varDescription : PTEN(X)
>>>>>>>>>>>>> I am a source variable: varId : 77, varName : Histology (X), varDescription : Histology (X)
>>>>>>>>>>>>> I am a target variable: varId : 72, varName : HER2(X), varDescription : HER2(X)
>>>>>>>>>>>>> I am a target variable: varId : 71, varName : ER (X), varDescription : ER (X)
>>>>>>>>>>>>> I am a target variable: varId : 74, varName : FISH, varDescription : FISH description

しかし、targetVariables リストのオブジェクトごとに VarId を取得しようとすると、次のようになります。

System.out.println(">>>>>>>>>>>>> I am a target variable: " + targetVariables.get(i).getVarId());

次のエラーが表示されます。

>>>>>>>>>>>>> I am a target variable: varId : 72, varName : HER2(X), varDescription : HER2(X)
java.lang.ClassCastException: java.lang.String cannot be cast to com.forth.dbutils.CRVariable
    at com.forth.actions.ReportConfiguratorBean.setAssocImTypVariables(ReportConfiguratorBean.java:414)

行 414 は、現在のオブジェクト リストの VarId プロパティを取得しようとしている行です: targetVariables.get(i).getVarId() :

 System.out.println(">>>>>>>>>>>>> I am a target variable: " + targetVariables.get(i).getVarId());

私のHibernateオブジェクトの実装で何が間違っているかについてのアイデアはありますか???

4

1 に答える 1

0

私の選択リストコンポーネント:

<p:pickList id="pickList" 
  value="#   {reportConfiguratorBean.dualListVars}"
  var="cRVariable" 
  itemValue="#{cRVariable}" 
  itemLabel="#{cRVariable.varName}"
  converter="cRVariableConverter"
  Ajax="false" >
  <f:facet name="sourceCaption">Available Variables</f:facet>
  <f:facet name="targetCaption">Associated Variables</f:facet>              
</p:pickList>

そして、CRVariableターゲットリストアイテムをオブジェクトとして取得するためのcRVariableConverter:

public Object getAsObject(FacesContext context, UIComponent component, String value) {
    Long varId = Long.parseLong(value.trim());  
    List<CRVariable> cRVariables = mybean.getCRVariables();

    for (CRVariable cRVariable:cRVariables) {
        if(cRVariable.getVarId().compareTo(varId)==0){
            return cRVariable;
        }
    }

    return null;    
}
于 2012-11-29T12:50:04.477 に答える