Почему поле NUMBER с нулевым значением получается как 0 из Spring Data JPA

У меня проблема с получением Integer значения из базы данных. Я использую Spring Data JPA для взаимодействия с базой данных. Для NUMBER Для столбца, который может иметь значение NULL, значение NULL из базы данных (Oracle) возвращается как 0, вместо null,

Вот код:

PaymentSpecVO.java:

public class PaymentSpecVO extends BaseVO<PaymentSpec> {
   private Integer paymStartWk;

  public Integer getPaymStartWk() {
  return paymStartWk;
 }
 public void setPaymStartWk(Integer paymStartWk) {
    this.paymStartWk = paymStartWk;
 }
}

PaymentSpecUIService.java

public class PaymentSpecUIService implements IPaymentSpecUIService {

    @Autowired
    protected IPaymentSpecService paymentSpecService;

    public void savePaymentSpec(PaymentSpecVO paymentSpecVO) {
       //some logic
        paymentSpec = paymentSpecService.save(paymentSpec);

       // transform the saved entity back to VO object
       //Here All my VO objects extends BaseVO 
        paymentSpecVO.toDTO(paymentSpec);
    }
  public PaymentSpecVO findPaymentSpecByKey(PaymentSpecId key) {

    //Here during retrival It uses findByKey(key);
    PaymentSpec paymentSpec = paymentSpecService.findByKey(key);
    PaymentSpecVO paymentSpecVO = new PaymentSpecVO();

       if (paymentSpec != null) {
         paymentSpecVO.toDTO(paymentSpec);
         return paymentSpecVO;
        }
    }
}

BaseVO.java

public abstract class BaseVO<E extends Object> implements Serializable {
    private Class<E> entity;

    protected BaseVO(Class<E> entity) {
        this.entity = entity;
        ConvertUtils.register(dateConverter, Date.class);
    }

    public Object toDTO(E entity) {

    try {
        copyEntityToValueObjectProperties(entity, this);
    } catch (Exception ex) {
       ex.printStackTrace();
    }
      return this;
     }


  /**
  * Copies the properties from Entity object to Value object.
  * 
  * */

    public void copyEntityToValueObjectProperties(Object entityObject, Object valueObject) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException,InstantiationException, SecurityException, NoSuchFieldException {

    // Get the list of fields from source objects
    Field[] entityObjectFields = entityObject.getClass().getDeclaredFields();

    // Reference of BaseEntity class type
    Class<?> entityType = BaseEntity.class;
    Class<?> collType = Collection.class;

    // Iteration of entity properties
    for (Field entityField : entityObjectFields) {
        try{
            //
            // Checks whether the entity field is an object and is of type
            // BaseEntity class.
            //
            if (!entityType.isAssignableFrom(entityField.getType()) && !collType.isAssignableFrom(entityField.getType()) 
                 && !Modifier.isFinal(entityField.getModifiers()) && !Modifier.isStatic(entityField.getModifiers())) {
                 BeanUtils.setProperty(valueObject, entityField.getName(), BeanUtils.getProperty(entityObject, entityField.getName()));

            }
          }
          catch(Exception e){
            continue;
         }
       }
    }

}

PaymentSpecId.java

public class PaymentSpecId implements BaseEntity {
  private String contractId;
  private String sectionId;
  private String id;

  public PaymentSpecId() {
  }

  public PaymentSpecId(String id, String contractId, String sectionId){
    this.id = id;
    this.contractId = contractId;
    this.sectionId = sectionId;
  }

  @Column(name = "ID", nullable = false, length = 2)
  public String getId() {
    return this.id;
  }

  public void setId(String id) {
   this.id = id;
  }
}

IPaymentSpecService.java

@Transactional(readOnly = true)
public interface IPaymentSpecService  {
    @Transactional(readOnly = false)
    public PaymentSpec save(PaymentSpec PaymentSpec);
}

Моя таблица БД

COLUMN_NAME      DATA_TYPE    NULLABLE    DEFAULT_VALUE
------------     ---------    --------    -------------
PAYM_START_WK    NUMBER(4,0)    Yes             null

И когда я нажимаю на ссылку редактирования в пользовательском интерфейсе, то есть на странице JSF, она передает paymentID методу findPaymentSpecByKey (ключ PaymentSpecId) в файле PaymentSpecUIService.java, используя поддерживающие bean-компоненты PaymentSpecVO.java, и во всплывающем окне он отображает значение paymStartWK в компоненте inputText как 0, хотя данные в БД хранятся как NULL

0 ответов

Другие вопросы по тегам