ejbload一般是用来实现数据查询,ejbstore一般是用来实现数据修改,这些方法都是系统自动调用的,你只需要在它里面添加你需要实现的功能,楼主最好把你bean 的源代码发上来看看

解决方案 »

  1.   

    应该不用。看样你的server支持的不好。
      

  2.   

    /**
     * @author robby10
     *
     * Bean implementation class for Enterprise Bean: MaterialItem
     */
    public class MaterialItemBean implements javax.ejb.EntityBean { public BigDecimal autoId;
    public String materialCode;
    public String materialName;
    public String supplierCode;
    public String supplierName;
    public String groupCode;
    public int rank;

    private Connection conn;
    private javax.ejb.EntityContext myEntityCtx; /**
     * ejbActivate
     */
    public void ejbActivate() {

    autoId = (BigDecimal)myEntityCtx.getPrimaryKey();

    } /**
     * ejbLoad
     */
    public void ejbLoad() { try{
    loadItems();
    }catch(Exception ex) {
    throw new EJBException(
    "ejbLoad exception:" + ex.getMessage() + ".....");
    } } /**
     * ejbPassivate
     */
    public void ejbPassivate() {

    autoId = null;

    } /**
     * ejbRemove
     */
    public void ejbRemove() throws javax.ejb.RemoveException {
    } /**
     * ejbStore
     */
    public void ejbStore() { try{
    storeItems();
    }catch(Exception ex) {
    throw new EJBException(
    "ejbStore exception:" + ex.getMessage() + ".....");
    } } /**
     * getEntityContext
     */
    public javax.ejb.EntityContext getEntityContext() {
    return myEntityCtx;
    } /**
     * setEntityContext
     */
    public void setEntityContext(javax.ejb.EntityContext ctx) {
    myEntityCtx = ctx;
    try {
    conn = ServerHelper.instance().getConnection();
    } catch(Exception ex) {
    throw new EJBException(
    "Connect to DB failed:" + ex.getMessage());
    }
    } /**
     * unsetEntityContext
     */
    public void unsetEntityContext() {
    myEntityCtx = null;
    try {
    conn.close();
    } catch (SQLException ex) {
    throw new EJBException (
    "Close DB Connection failed:" + ex.getMessage());
    }
    } /**
     * ejbFindByPrimaryKey
     */
    public java.math.BigDecimal ejbFindByPrimaryKey(
    java.math.BigDecimal primaryKey)
    throws javax.ejb.FinderException {

    boolean result;
    try{
    result = selectByPrimaryKey(primaryKey);
    }catch (Exception ex) {
    throw new EJBException(
    "ejbFindByPrimaryKey exception:" + ex.getMessage());
    }
    if(result) {
    return primaryKey;
    }else{
    throw new ObjectNotFoundException(primaryKey + " not found.");
    } } public Collection ejbFindByGroup(String groupCode) throws FinderException {

    try{
    return selectByGroup(groupCode);
    }catch(Exception ex) {
    throw new EJBException(ex.getMessage());
    } }

    public Collection ejbFindAllFree() throws FinderException {

    try{
    return selectAllFree();
    }catch(Exception ex) {
    throw new EJBException(ex.getMessage());
    } } public Collection ejbFindByMaterialCode(String materialCode) throws FinderException {

    try{
    return selectByMaterialCode(materialCode);
    }catch(Exception ex) {
    throw new EJBException(ex.getMessage());
    } } private boolean selectByPrimaryKey(BigDecimal primaryKey) throws SQLException { String sql = "select ID from SUPPLIER_ITEM_MANAGE where ID = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    try{
    ps.setBigDecimal(1, primaryKey);
    ResultSet rs = ps.executeQuery();
    return rs.next();
    }finally{
    ps.close();
    }

    }

    private Collection selectByGroup(String groupCode) throws SQLException {

    String sql = "select ID from SUPPLIER_ITEM_MANAGE where GROUP_CODE = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    try{
    ps.setString(1, groupCode);
    ResultSet rs = ps.executeQuery();
    ArrayList al = new ArrayList();
    while(rs.next()) {
    BigDecimal id = rs.getBigDecimal(1); 
    al.add(id);
    }
    return al;
    }finally{
    ps.close();
    }

    } private Collection selectAllFree() throws SQLException {

    String sql = "select ID from SUPPLIER_ITEM_MANAGE where GROUP_CODE is null";
    Statement stmt = conn.createStatement();
    try{
    ResultSet rs = stmt.executeQuery(sql);
    ArrayList al = new ArrayList();
    while(rs.next()) {
    BigDecimal id = rs.getBigDecimal(1); 
    al.add(id);
    }
    return al;
    }finally{
    stmt.close();
    }

    } private Collection selectByMaterialCode(String materialCode) throws SQLException {

    String sql = "select ID from SUPPLIER_ITEM_MANAGE where ITEM_CODE like CONCAT(CONCAT('%',?),'%')";
    PreparedStatement ps = conn.prepareStatement(sql);
    try{
    ps.setString(1, materialCode);
    ResultSet rs = ps.executeQuery();
    ArrayList al = new ArrayList();
    while(rs.next()) {
    BigDecimal id = rs.getBigDecimal(1); 
    al.add(id);
    }
    return al;
    }finally{
    ps.close();
    }

    } private void loadItems() throws SQLException {

    String sql = "select ID,SUPPLIER_ITEM_MANAGE.ITEM_CODE,ITEM.DESCRIPTION,SUPPLIER_ITEM_MANAGE.SUPPLIER_CODE,SUPPLIER_NAME,GROUP_CODE,RANK " +
    "from SUPPLIER_ITEM_MANAGE,ITEM,SUPPLIER where SUPPLIER_ITEM_MANAGE.ITEM_CODE = ITEM.ITEM_CODE " +
    "and SUPPLIER_ITEM_MANAGE.SUPPLIER_CODE = SUPPLIER.SUPPLIER_CODE and ID = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    try{
    ps.setBigDecimal(1, autoId);
    ResultSet rs = ps.executeQuery();
    if(rs.next()) {
    autoId = rs.getBigDecimal(1); 
    materialCode = rs.getString(2); 
    materialName = rs.getString(3); 
    supplierCode = rs.getString(4); 
    supplierName = rs.getString(5); 
    groupCode = rs.getString(6); 
    rank = rs.getInt(7); 
    }else {
    throw new NoSuchEntityException(
    autoId + " not found.");
    }
    }finally{
    ps.close();
    }

    } private void storeItems() throws SQLException { String sql = "update SUPPLIER_ITEM_MANAGE set RANK = ? where ID = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    int rowCount;
    try{
    ps.setInt(1, rank);
    ps.setBigDecimal(2, autoId);
    rowCount = ps.executeUpdate();
    }finally{
    ps.close();
    }
    if(rowCount == 0) {
    throw new EJBException(
    "Storing " + autoId + " failed.");
    }

    } /**
     * @return
     */
    public BigDecimal getAutoId() {
    return autoId;
    } /**
     * @return
     */
    public String getGroupCode() {
    return groupCode;
    } /**
     * @return
     */
    public String getMaterialCode() {
    return materialCode;
    } /**
     * @return
     */
    public String getMaterialName() {
    return materialName;
    } /**
     * @return
     */
    public int getRank() {
    return rank;
    } /**
     * @return
     */
    public String getSupplierCode() {
    return supplierCode;
    } /**
     * @return
     */
    public String getSupplierName() {
    return supplierName;
    } /**
     * @param string
     */
    public void setGroupCode(String string) {
    groupCode = string;
    } /**
     * @param i
     */
    public void setRank(int i) {
    rank = i;
    }}
      

  3.   

    我在一个SessionBean中,materialItemLocal.setGroupCode(null); (原值为1)
    后来通过ejbFindByGroup(1)找对象,却发现被我set为null的那个对象还在结果集中
      

  4.   

    你这个问题我以前也遇到过。
    (你的程序我根本就没时间看,那么长的程序,一点注解都没有,谁也没有时间去读那么长的程序)
    问题可能是在resault上,你在使用完一个resault后,没有将其close掉,所以造成结果集中有n个
    结果。
    如果你close掉后还不成的话可能是你的resault版本没有升级,到cn-java上去查查如何升级的
    资料吧!!!!!