我开始强烈地使用groovy来制作一切原型。这太棒了 但我遇到了groovy shell的问题 我用
运行的下一个代码groovy filename.groovy
一切都按预期工作
但是在groovysh
命令
load filename.groovy
不起作用:找不到课堂书。
代码:
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
类写为
@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 shell。不是最坏的情况,但如果我可以在shell中加载原型,那就太棒了。
你有什么想法如何解决这个问题?
答案 0 :(得分:0)
简短的回答是我认为没有办法解决这个问题。如果您要重复使用Book类而不经常更改它,您可以随时编译它,然后将其添加到类路径中,这样每次使用shell时Groovy都会选择它。