суббота, 14 июля 2018 г.

Интеграция Spring и JPA EclipseLink

Класс конфигурации приложения:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = {"jennom"})
@EnableLoadTimeWeaving
@PropertySource(value = "classpath:jennom.properties")
public class AppContext {


    @Bean
    public JpaTransactionManager jpaTransactionManager() {
        JpaTransactionManager jtm = new JpaTransactionManager();
        jtm.setDataSource(this.ds());
        jtm.setJpaDialect(new EclipseLinkJpaDialect());
        jtm.setPersistenceUnitName("jennomPU");
        return jtm;
    }

    @Bean(destroyMethod = "close")
    public DataSource ds() {
        BasicDataSource dsNodes = new BasicDataSource();
        dsNodes.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
        dsNodes.setUrl("jdbc:derby:./db/primer");
        dsNodes.setPassword("12345");
        dsNodes.setUsername("romka");
        return dsNodes;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean eemf = new LocalContainerEntityManagerFactoryBean();
        eemf.setDataSource(this.ds());
        eemf.setJpaVendorAdapter(elJpaVendorAdapter());
        eemf.setPackagesToScan("jennom.jpa");
        eemf.setPersistenceUnitName("jennomPU");
        eemf.setJpaDialect(new EclipseLinkJpaDialect());
        eemf.setSharedCacheMode(SharedCacheMode.ENABLE_SELECTIVE); 
        return eemf;
    }

    @Bean
    public EclipseLinkJpaVendorAdapter elJpaVendorAdapter() {
        EclipseLinkJpaVendorAdapter jpaVendorAdapter = new EclipseLinkJpaVendorAdapter();
        jpaVendorAdapter.setDatabase(Database.DERBY);
        jpaVendorAdapter.setGenerateDdl(true);
        jpaVendorAdapter.setShowSql(true);
        jpaVendorAdapter.setDatabasePlatform("org.eclipse.persistence.platform.database.DerbyPlatform");
        return jpaVendorAdapter;
    }

}

после этого вы можете создавать свой DAO:


@Service
@Repository
@Transactional
public class EjbDaoJPA {

    @PersistenceContext(unitName = "jennomPU")
    private EntityManager em;

    @Transactional(readOnly=true)
    public List<JpaNodes> findAllNodesJPQL () {
        List<JpaNodes> nodes=em.createNamedQuery("JpaNodes.findAll", JpaNodes.class).getResultList();
        return nodes;
    }
    @Transactional(readOnly=true)
    public JpaNodes findNodeJPQL (int id) {
        JpaNodes nodes=em.createNamedQuery("JpaNodes.findById", JpaNodes.class)
        .setParameter("id", id).getSingleResult();
        return nodes;
    }   
    public void removeNode (JpaNodes jpaNode) {
        em.remove(jpaNode);
    } 

    public void createNode (JpaNodes jpaNode) {
        em.persist(jpaNode);
    }   

    public void editNode (JpaNodes jpaNode) {
        em.merge(jpaNode);
    } 
      public void clearAllNodesSQL () {

        em.createNativeQuery("delete from nodes");
    } 

    public void clearAllNodesJPQL () {
        em.createNamedQuery("JpaNodes.clear", JpaNodes.class);
    }   

}


Сущность JpaNodes

@Entity
@Cacheable(true)
@Table(name="nodes")
@NamedQueries ({
    @NamedQuery(name="JpaNodes.clear",
            query="delete from JpaNodes"),   
    @NamedQuery(name="JpaNodes.findAll",
            query="select c from JpaNodes c order by c.ip"),   
    @NamedQuery(name="JpaNodes.findByIP",
            query="select c from JpaNodes c where c.ip = :ip"),
    @NamedQuery(name="JpaNodes.findById",
            query="select c from JpaNodes c where c.id = :id")   
})
public class JpaNodes implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) /// !!!!!!!! = IDENTITY
    private int id;
   
    @Basic   
    @Column(name = "time", nullable=true, insertable=true, updatable=true, length=255)    
    private String time="";
   
    @Basic 
    @Size(min=1,max=5,message="stateFar")
    @Column(name = "StateFar", nullable=true, insertable=true, updatable=true, length=255)    
    private String StateFar="-";
   
    @Basic
    @NotNull(message="IP/DNS not null")
    //@Pattern(regexp="",message="")
    @Column(name = "ip", nullable=false, insertable=true, updatable=true, length=255)    
    private String ip;
   
    @Basic   
    @Column(name = "info", nullable=true, insertable=true, updatable=true, length=255)    
    private String info="";
   
    @Basic 
    @NotNull(message="Type not null")
    @Column(name = "tip", nullable=false, insertable=true, updatable=true, length=255)    
    private String tip="";   
   
    @Basic   
    @Column(name = "loss", nullable=true, insertable=true, updatable=true, length=255)    
    private String loss="0";
   
    @Basic
    @Size(min=1,max=5,message="state")
    @Column(name = "state", nullable=true, insertable=true, updatable=true, length=255)    
    private String state="-";
    ...........геттеры + сеттеры + equals + hashCode + toString}

Комментариев нет:

Отправить комментарий

Взаимодействие между приложениями и Watch Service

Взаимодействие между разными приложениями Java можно сделать с помощью файловой системы, базы данных и JMS. Рассмотрим случай ФС - в Java ...