Класс сущности Spring не может разрешить схему - PullRequest
0 голосов
/ 08 октября 2018

Я новичок в Весне и Спящем.Я настроил источник данных.Когда я делаю класс сущностей, я получаю ошибку (в идее), схема не может быть решена.Все определения схемы, таблицы, столбцов в Idea подчеркнуты красным.С объектом все в порядке, но когда я пытаюсь использовать HibernateTemplate.save - я получаю сообщение об ошибке:

[10/7/18 7: 58: 46: 284 MSK] 00000169 SystemOut O SMSDaoImpl.saveSMS: {"deliveryTime ": нулевой," идентификатор ": нулевой," idExt ": 123," сообщение ":" Тест», "phoneAb": "71234567890", "SENDTIME": 1538888326275, "staffId": 99001446, "staffIdAb": 99000039, "status": null} [07.10.17 7: 58: 46: 344 MSK] 00000169 DispatcherPor E org.springframework.web.portlet.FrameworkPortlet processRequest Не удалось завершить запрос org.springframework.dao.DataIntegrityViolationException: не удалось вставить: [com.technoserv.SMS.entity.SMS];SQL [вставить в ORG.SMS (ID, DELIVERY_TIME, ID_EXT, MESSAGE, PHONE_AB, SEND_TIME, STAFF_ID, STAFF_ID_AB, STATUS) значения (по умолчанию,?,?,?,?,?,?,?,?)];вложенным исключением является org.hibernate.exception.DataException: не удалось вставить: [com.technoserv.SMS.entity.SMS]

Что не так?Заранее спасибо.

ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- !DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"-->
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context.xsd">


<bean class="org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass">
        <value>org.springframework.web.servlet.view.JstlView</value>
    </property>
    <property name="prefix">
        <value>/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>


<bean id="WASDataSource"
      class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"
              value="DB2_ds"/>
    <property name="lookupOnStartup"
              value="false"/>
    <property name="cache"
              value="false"/> <!-- ?? -->
    <property name="proxyInterface"
              value="javax.sql.DataSource"/>
</bean>

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="WASDataSource" />
    <property name="configLocation" value="classpath:/hibernate.cfg.xml" />
</bean>

<bean id="smsDAO" class="com.technoserv.SMS.dao.SMSDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="smsService" class="com.technoserv.SMS.service.SMSServiceImpl">
    <property name="dao" ref="smsDAO"/>
</bean>

</beans>

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="connection.datasource">DB2_ds</property>
<property name="connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.DB2Dialect</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">false</property>

<mapping class="com.technoserv.SMS.entity.SMS"></mapping>
</session-factory>
</hibernate-configuration>

SMS.java

package com.technoserv.SMS.entity;

import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.util.Calendar;
import flexjson.JSONSerializer;
import org.springframework.transaction.annotation.Transactional;

@Entity
@Table(schema = "ORG", name="SMS")
public class SMS {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false)
private Integer id;

@Column(name = "ID_EXT")
private Integer idExt;

@Column(name = "STAFF_ID")
private Integer staffId;

@Column(name = "STAFF_ID_AB")
private Integer staffIdAb;

@Column(name = "PHONE_AB")
private String phoneAb;

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "dd.MM.yyyy hh:mm:ss a")
@Column(name = "SEND_TIME",columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
private Calendar sendTime;

@Column(name = "MESSAGE")
private String message;

@Column(name = "STATUS")
private String status;

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "dd.MM.yyyy hh:mm:ss a")
@Column(name = "DELIVERY_TIME")
private Calendar deliveryTime;

public Integer getId() {
    return id;
}

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

public Integer getIdExt() {
    return idExt;
}

public void setIdExt(Integer idExt) {
    this.idExt = idExt;
}

public Integer getStaffId() {
    return staffId;
}

public void setStaffId(Integer staffId) {
    this.staffId = staffId;
}

public Integer getStaffIdAb() {
    return staffIdAb;
}

public void setStaffIdAb(Integer staffIdAb) {
    this.staffIdAb = staffIdAb;
}

public String getPhoneAb() {
    return phoneAb;
}

public void setPhoneAb(String phoneAb) {
    this.phoneAb = phoneAb;
}

public Calendar getSendTime() {
    return sendTime;
}

public void setSendTime(Calendar sendTime) {
    this.sendTime = sendTime;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public Calendar getDeliveryTime() {
    return deliveryTime;
}

public void setDeliveryTime(Calendar deliveryTime) {
    this.deliveryTime = deliveryTime;
}

public String toJson() {
    return new JSONSerializer()
            .exclude("*.class").serialize(this);
}
@PersistenceContext
transient EntityManager entityManager;
public static final EntityManager entityManager() {
    EntityManager em = new SMS().entityManager;
    if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
    return em;
}
@Transactional
public void persist() {
    if (this.entityManager == null) this.entityManager = entityManager();
    this.entityManager.persist(this);
}

}

SMSDao.java

package com.technoserv.SMS.dao;

import com.technoserv.SMS.entity.SMS;

public interface SMSDao {
public SMS read(int id);
public void saveSMS(SMS sms);
}

SMSDaoImpl.java

package com.technoserv.SMS.dao;

import com.technoserv.SMS.entity.SMS;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class SMSDaoImpl extends HibernateDaoSupport implements SMSDao{
@Override
public SMS read(int id) {
    return getHibernateTemplate().get(SMS.class, id);
}

@Override
public void saveSMS(SMS sms) {
    System.out.println("SMSDaoImpl.saveSMS:"+sms.toJson());
    HibernateTemplate ht = getHibernateTemplate();
    ht.save(sms);
    ht.flush();
}
}

SMSService.java

package com.technoserv.SMS.service;

import com.technoserv.SMS.entity.SMS;

public interface SMSService {
public SMS getSMSById(int id);
public void saveSMS (SMS sms);
}

SMSServiceImpl.java

package com.technoserv.SMS.service;

import com.technoserv.SMS.dao.SMSDao;
import com.technoserv.SMS.dao.SMSDaoImpl;
import com.technoserv.SMS.entity.SMS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Transactional
public class SMSServiceImpl implements SMSService{
@Autowired
private SMSDao dao;
@PersistenceContext
private EntityManager em;
@Override
public SMS getSMSById(int id){ return dao.read(id);}

@Override
public void saveSMS(SMS sms) {
    System.out.println("saveSMS:"+sms.toJson());
    System.out.println("dao:"+dao.toString());
    dao.saveSMS(sms);
}

public void setDao(SMSDaoImpl dao) {
    this.dao = dao;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...