2

我是 java、jsf 和 hibernate 的新手,我一直在使用 jboss forge 为我的实体生成 crud 函数,但我不知道如何使它与 hibernate @embedable id 一起工作,这是我的代码。

    @实体
    @Table(名称=“estado”,模式=“公共”)
    公共类 Estado 实现 java.io.Serializable
    {

       私人 EstadoId id;
       私人派斯派斯;
       私人日期 fechaRegistro;
       私有字符串描述;
       私人短期身份;
       私有集 municipios = new HashSet(0);

       公共 Estado()
       {
       }

       public Estado(EstadoId id, Pais pais, Date fechaRegistro, short estatus)
       {
          这个.id = id;
          this.pais = pais;
          this.fechaRegistro = fechaRegistro;
          this.estatus = 状态;
       }

       public Estado(EstadoId id, Pais pais, Date fechaRegistro, 字符串描述, short estatus, Set municipios)
       {
          这个.id = id;
          this.pais = pais;
          this.fechaRegistro = fechaRegistro;
          this.descripcion = 描述;
          this.estatus = 状态;
          this.municipios = municipios;
       }

       @EmbeddedId
       @AttributeOverrides( { @AttributeOverride(name = "paisId", column = @Column(name = "pais_id", nullable = false, length = 5)), @AttributeOverride(name = "estadoId", column = @Column(name = “estado_id”,可为空 = 假,长度 = 5)) })       

    }

接下来是可嵌入的 id

    @可嵌入
    公共类 EstadoId 实现 java.io.Serializable {


         私有字符串 paisId;
         私有字符串 estadoId;

        公共 EstadoId() {
        }

        公共 EstadoId(字符串 paisId,字符串 estadoId){
           this.paisId = paisId;
           this.estadoId = estadoId;
        }                    

    }

现在是@ConversationScoped bean


    导入 javax.annotation.Resource;
    导入 javax.ejb.SessionContext;
    导入 javax.ejb.Stateful;
    导入 javax.enterprise.context.Conversation;
    导入 javax.enterprise.context.ConversationScoped;
    导入 javax.faces.application.FacesMessage;
    导入 javax.faces.component.UIComponent;
    导入 javax.faces.context.FacesContext;
    导入 javax.faces.convert.Converter;
    导入 javax.inject.Inject;
    导入 javax.inject.Named;    

    @命名
    @有状态
    @ConversationScoped
    公共类 EstadoBean 实现 Serializable
    {

       私有静态最终长序列版本UID = 1L;

       /*
        * 支持创建和检索 Estado 实体
        */

       私人长ID;

       公共长 getId()
       {
          返回这个.id;
       }

       公共无效 setId(长 id)
       {
          这个.id = id;
       }

       私人 Estado estado;

       公共 Estado getEstado()
       {
          返回这个.estado;
       }

       @注入
       私人对话对话;

       @PersistenceContext(type = PersistenceContextType.TRANSACTION)
       私有实体管理器实体管理器;

       公共字符串创建()
       {

          this.conversation.begin();
          返回“创建?面孔重定向=真”;
       }

       公共无效检索()
       {

          if (FacesContext.getCurrentInstance().isPostback())
          {
             返回;
          }

          if (this.conversation.isTransient())
          {
             this.conversation.begin();
          }

          如果(this.id == null)
          {
             this.estado = this.example;
          }
          别的
          {
             this.estado = findById(getId());
          }
       }

       公共 Estado findById(长 id)
       {

          返回 this.entityManager.find(Estado.class, id);
       }


       @资源
       私人会话上下文会话上下文;

       公共转换器 getConverter()
       {

          final EstadoBean ejbProxy = this.sessionContext.getBusinessObject(EstadoBean.class);

          返回新的转换器()
          {

             @覆盖
             public Object getAsObject(FacesContext 上下文,UIComponent 组件,字符串值)
             {

                返回 ejbProxy.findById(Long.valueOf(value));
             }

             @覆盖
             public String getAsString(FacesContext 上下文,UIComponent 组件,对象值)
             {

                如果(值 == 空)
                {
                   返回 ””;
                }

                return String.valueOf(((Estado) value).getId());
             }
          };
       }

    }

事实上,我真正的疑问是如何正确编码 getConverter 方法,因为 estado 实体 id 它不是字符串值,estado 实体的 id 类型是 estadoId 可嵌入类型,由两个字符串值组成,我的另一个问题是从哪里getConverter 方法获取字符串值参数?

4

0 回答 0