groovysh и groovy классы видимости и разбор аннотаций - PullRequest
0 голосов
/ 26 августа 2009

Я начал интенсивно использовать Groovy для создания прототипа. Это удивительно.
Но я столкнулся с проблемой с заводной оболочкой.
Следующий код, который я запускаю с

groovy filename.groovy

и все работает как положено.
Но внутри groovysh команда

load filename.groovy

Не работает: не может найти класс Book.

код:

import org.hibernate.cfg.*
import org.hibernate.ejb.*
import javax.persistence.*

@Entity class Book {
    @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long id
    public String author
    public String title
    String toString() { "$title by $author" }
}

hibernateProperties = [
    "hibernate.dialect": "org.hibernate.dialect.HSQLDialect",
    "hibernate.connection.driver_class": "org.hsqldb.jdbcDriver",
    "hibernate.connection.url": "jdbc:hsqldb:mem:demodb",
    "hibernate.connection.username": "sa",
    "hibernate.connection.password": "",
    "hibernate.connection.pool_size": "1",
    "hibernate.connection.autocommit": "true",
    "hibernate.cache.provider_class": "org.hibernate.cache.NoCacheProvider",
    "hibernate.hbm2ddl.auto": "create-drop",
    "hibernate.show_sql": "true",
    "hibernate.transaction.factory_class": "org.hibernate.transaction.JDBCTransactionFactory",
    "hibernate.current_session_context_class": "thread"
]

properties = new Properties()
hibernateProperties.each { k, v -> properties.setProperty(k, v) }
cfg = new Ejb3Configuration()

emf = cfg.addProperties(properties).addAnnotatedClass(Book.class).buildEntityManagerFactory()
em = emf.createEntityManager()
query = em.createQuery("SELECT b FROM Book b")

println query.getResultList()

На самом деле, если вы напишите Book class как

@Entity 
class Book {
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long id
    public String author
    public String title
    String toString() { "$title by $author" }
}

Groovy Shell не будет понимать аннотации при выполнении

load filename.groovy

Итак, чтобы играть с JPQL, мне нужно переместить Entity в отдельный файл, выполнить его groovyc, а затем загрузить оболочку groovy. Не худший случай, но было бы здорово, если бы я мог просто загрузить прототип внутри оболочки.

У вас есть идеи, как это решить?

1 Ответ

0 голосов
/ 29 августа 2009

Короткий ответ: я не думаю, что есть способ обойти это. Если вы собираетесь повторно использовать класс Book, не меняя его часто, вы всегда можете скомпилировать его один раз, а затем добавить его в ваш путь к классам, чтобы Groovy брал его каждый раз, когда вы используете оболочку.

...