У вас есть два свойства, сопоставленных с автором столбца:
<property name="author" column="author" type="string"/>
<property name="publisher" column="author" type="string"/>
Чтобы устранить вторую ошибку, добавьте имя базы данных к URL-адресу вашего соединения JDBC:
<property name="hibernate.connection.url">
jdbc:mysql://127.0.0.1:3306/dbname
</property>
Читая ваши источники, я наткнулся на ваш метод getBooks (). Вы не должны создавать SessionFactory каждый раз, когда вам нужен Hibernate Session. Создание SessionFactory слишком дорого (измерено во времени), чтобы выполнять это каждый раз. Минимальным решением будет класс Singleton, который вы можете запросить для SessionFactory:
public class SessionFactoryUtil {
private static SessionFactory sessionFactory;
private SessionFactoryUtil() {}
static {
sessionFactory = new Configuration().configure().buildSessionFactory();
}
public static SessionFactory getInstance() { return sessionFactory; }
}