admin管理员组

文章数量:1387358

when executing this test: i'm using hibernate 5 and spring 5.3.32 and jakart.persistence

Config Class

package x;
import java.util.Properties;
import .springframework.orm.hibernate5.LocalSessionFactoryBean;
import .springframework.scheduling.annotation.EnableAsync;
import .springframework.context.annotation.AnnotationConfigApplicationContext;
import .springframework.context.annotation.Bean;
import .springframework.context.annotation.Configuration;
import .springframework.context.annotation.PropertySource;
import com.zaxxer.hikari.HikariConfig;
import javax.sql.DataSource;
import .springframework.transaction.annotation.EnableTransactionManagement;
import .springframework.beans.factory.annotation.Value;
import com.zaxxer.hikari.HikariDataSource;
import .springframework.orm.hibernate5.HibernateTransactionManager;
import  .springframework.transaction.PlatformTransactionManager;
import .hibernate.cfg.Environment;
import .hibernate.SessionFactory;
import x.dao.SingerDao;
import x.dao.SingerDaoImpl;
import .springframework.context.annotation.ComponentScan;
public class hibe {
        public static void main(String ...args){
        AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(cfg.class);

        SingerDao singerDao=ctx.getBean(SingerDao.class);

        singerDao.findAll().forEach(s->System.out.println(s));
        
        }    
}

@Configuration
@ComponentScan(basePackages="x")
@EnableAsync
//@EnableAsync
@PropertySource("classpath:db/jdbc.properties")
@EnableTransactionManagement
class cfg{

    @Value("${jdbc.username}")
    String username;

    @Value("${password}")
    String password;

    @Value("${driverClassName}")
    String driverClassName;

    @Value("${url}")
    String url;

   @Bean(destroyMethod = "close")
    DataSource dataSource(){
        HikariConfig cfg=new HikariConfig();
        cfg.setPassword(password);
        cfg.setUsername(username);
        cfg.setDriverClassName(driverClassName);
        cfg.setJdbcUrl(url);
        HikariDataSource ds=new HikariDataSource(cfg);
        ds.setMaximumPoolSize(25);
        return ds;
    }

    @Bean
    Properties hibernateProperties(){
        Properties hibernateProp=new Properties();
        hibernateProp.put(Environment.HBM2DDL_AUTO, "none");
        hibernateProp.put(Environment.FORMAT_SQL, false);
        hibernateProp.put(Environment.USE_SQL_COMMENTS, false);
        hibernateProp.put(Environment.SHOW_SQL, false);
        hibernateProp.put(Environment.MAX_FETCH_DEPTH, 3);
        hibernateProp.put(Environment.STATEMENT_BATCH_SIZE, 10);
        hibernateProp.put(Environment.STATEMENT_FETCH_SIZE, 50);
        hibernateProp.put(Environment.DIALECT, ".hibernate.dialect.OracleDialect"); 
        return hibernateProp;
    }
    @Bean
    LocalSessionFactoryBean sessionfactory(){
        LocalSessionFactoryBean ls=new LocalSessionFactoryBean();
        ls.setDataSource(dataSource());
        ls.setPackagesToScan("x.entities");

        ls.setHibernateProperties(hibernateProperties());

        return ls;
    }

    @Bean PlatformTransactionManager transactionManager(){
        var tm=new HibernateTransactionManager();
        tm.setSessionFactory(sessionfactory().getObject());
        return tm;
    }
}


Singer Entity

package x.entities;
import jakarta.persistence.MappedSuperclass;

import java.io.Serial;
import java.io.Serializable;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Version;
import jakarta.persistence.GenerationType;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import java.util.*;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Table;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.OneToMany;
import jakarta.persistence.JoinTable;
import  jakarta.persistence.CascadeType;
import java.io.Serial;
@Entity()
@Table(name="SINGER")
public class Singer{

    @Serial
    public static final long serialVersionUID=3L;
    protected String firstname;
    protected String lastname;
    protected Date birthDate;

    //protected Set<Album> albums=new HashSet<>();
    //protected Set<Instrument> instruments; 
   // @ElementCollection(targetClass=Integer.class)

    @Column(name="first_name")
    public String getFirstname(){
        return firstname;
    }

    @Column(name="last_name")
    public String getLastname(){
        return lastname;
    }
    @Column(name="BIRTH_DAT")
    public Date getBirthDat(){
        return birthDate;
    }
    public void setLastname(String lastname){
        this.lastname=lastname;
    }
    public void setFirstName(String firstname){
        this.firstname=firstname;
    }
    public void setBirthDate(Date birthDate){
        this.birthDate=birthDate;
    }
    /*
    @ManyToMany
    @JoinTable(name="singer_instrument",joinColumns=@JoinColumn(name="singer_id"),
    inverseJoinColumns=@JoinColumn(name="instrument_iD"))
    public Set<Instrument> getInstruments(){
        return instruments;
    }
    public void setInstrument(Instrument insr){
        getInstruments().add(insr);
    }
    public void setInstruments(Set<Instrument> insr){
        instruments=insr;
    }
    public void removeInstrument(Instrument insr){
        getInstruments().remove(insr);
    }


   @OneToMany(mappedBy="singer",cascade=CascadeType.ALL,orphanRemoval=true)
    public Set<Album> getAlbums(){
        return albums;
    }
    public void setAlbum(Album album){
        album.setSinger(this);
            albums.add(album);
    }
    public void setAlbums(Set<Album> albums){
        this.albums=albums;
    }
    public void removeAlbum(Album album){
        getAlbums().remove(album);
    }*/

    
    protected int id;
    protected int version;
    
    @Column(name="id")
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int getId(){
        return id;
    }
    @Version
    @Column(name="version")
    public int getVersion(){
        return version;
    }
    public void setId(int id){
        this.id=id;
    }
    public void setVersion(int version){
        this.version=version;
    }
}

DAO


package x.dao;
import x.entities.Singer;
import java.util.*;

import .springframework.transaction.annotation.Transactional;

import .hibernate.Session;
import .hibernate.SessionFactory;
import .springframework.stereotype.Repository;
import .hibernate.Query;
@Transactional(readOnly=true)
@Repository("singerDaoImpl")
public class SingerDaoImpl implements SingerDao {
    
    SessionFactory sessionFactory;
    public SingerDaoImpl(SessionFactory sf){
        sessionFactory=sf;
    }
    @Transactional 
    public List<Singer> findAll(){
        Session session=sessionFactory.getCurrentSession();
        System.out.println("\n\n\n\n\n"+Singer.class.getSimpleName()+"\n\n\n\n\n\n");
        Query query=session.createQuery(" FROM " + Singer.class.getSimpleName() + " e ");
        return query.list();
    }
    public List<Singer> findAllWithAlbum(){
            return new ArrayList<>();

    }
    public Singer findById(Long id){
            return new Singer();
    }
    public  Singer save(Singer singer){
        return new Singer();

    }
   public  void delete(Singer singer){

    }
}


so when executing the findAll() method it return this:

12:10:27.411 [main] WARN .hibernate.hql.internal.QuerySplitter -- HHH000183: no persistent classes found for query class: FROM Singer e 12:10:27.416 [main] DEBUG .springframework.orm.hibernate5.HibernateTransactionManager -- Initiating transaction commit 12:10:27.416 [main] DEBUG .springframework.orm.hibernate5.HibernateTransactionManager -- Committing Hibernate transaction on Session [SessionImpl(594463953)] 12:10:27.416 [main] DEBUG .hibernate.engine.transaction.internal.TransactionImpl -- committing 12:10:27.416 [HikariPool-1 connection adder] DEBUG com.zaxxer.hikari.pool.HikariPool -- HikariPool-1 - Added connection oracle.jdbc.driver.T4CConnection@21ebd3c7 12:10:27.419 [main] DEBUG .springframework.orm.hibernate5.HibernateTransactionManager -- Closing Hibernate Session [SessionImpl(594463953)] after transaction

本文标签: javano persistent classes found for query class from Singer sStack Overflow