我已将Hibernate配置为使用PostgreSQL序列(通过注释)为主键id列生成值,如下所示:
@Id
@SequenceGenerator(name="pk_sequence",sequenceName="entity_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
@Column(name="id", unique=true, nullable=false)
public int getId() {
return this.id;
}
Run Code Online (Sandbox Code Playgroud)
我在这个配置中看到的是,hibernate已经在持久化时分配了id值> 3000,而对使用过的序列的查询显示如下:
database=# select last_value from entity_id_seq;
last_value
------------
69
Run Code Online (Sandbox Code Playgroud)
(1排)
问题:
有什么不对吗?
hibernate应该与序列表同步吗?
如果没有,它在哪里存储最后生成的ID?
谢谢.
是否有可以执行以下操作的库?:
给定一个Object和一个HashMap,它枚举Hashmap的键,并在Object中查找这些键的setter并设置相关的值.看起来像这样的东西:
public Object setData(Object object, HashMap<String, Object> fields) {
for (Entry<String, Object> entry : fields.entrySet()) {
Method m = object.getClass().getMethod("set" + entry.getKey(), entry.getValue().getClass());
if (m != null) {
m.invoke(object, entry.getValue());
}
}
return object;
}
Run Code Online (Sandbox Code Playgroud)
这个任务看起来很简单,但我希望有人已经注意到了一些细微差别.如你所知,重新发明轮子(好轮子)是一种糟糕的方法.
我很困惑如何将List/Seq/Array扩展为可变长度参数列表.
鉴于我有test_func函数接受元组:
scala> def test_func(t:Tuple2[String,String]*) = println("works!")
test_func: (t: (String, String)*)Unit
Run Code Online (Sandbox Code Playgroud)
当我传递元组时,哪个有效:
scala> test_func(("1","2"),("3","4"))
works!
Run Code Online (Sandbox Code Playgroud)
从阅读Scala参考资料中我得到了强烈的印象,即以下内容也可以起作用:
scala> test_func(List(("1","2"),("3","4")))
<console>:9: error: type mismatch;
found : List[(java.lang.String, java.lang.String)]
required: (String, String)
test_func(List(("1","2"),("3","4")))
^
Run Code Online (Sandbox Code Playgroud)
还有一次绝望的尝试:
scala> test_func(List(("1","2"),("3","4")).toSeq)
<console>:9: error: type mismatch;
found : scala.collection.immutable.Seq[(java.lang.String, java.lang.String)]
required: (String, String)
test_func(List(("1","2"),("3","4")).toSeq)
Run Code Online (Sandbox Code Playgroud)
如何将List/Seq/Array扩展为参数列表?
先感谢您!
我不能让Hibernate使用java.util.UUID for PostgreSQL.
这是使用javax.persistence的映射.*annotations:
private UUID itemUuid;
@Column(name="item_uuid",columnDefinition="uuid NOT NULL")
public UUID getItemUuid() {
return itemUuid;
}
public void setItemUuid(UUID itemUuid) {
this.itemUuid = itemUuid;
}
Run Code Online (Sandbox Code Playgroud)
当持久化对象时,我得到一个SQLGrammarException:
column "item_uuid" is of type uuid but expression is of type bytea at character 149
Run Code Online (Sandbox Code Playgroud)
PostgreSQL版本是8.4.4
JDBC驱动程序--8.4.4-702(也试过9.0 - 同样的事情)
Hibernate版本是3.6,主要配置属性:
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://192.168.1.1/db_test</property>
Run Code Online (Sandbox Code Playgroud) 所以真实世界Haskell说:
每个monad变换器都是MonadTrans的一个实例
但我玩斯科蒂,并发现它的基础单子转换ScottyT
是没有的一个实例MonadTrans
.
看一下发行说明,这似乎是一个刻意的设计决定:这里.引用:
ScottyT的monad参数已经解耦,导致ScottyT构造函数的类型发生变化.因此,ScottyT不再是MonadTrans实例......
我希望你理解我的困惑.不过,我会尝试制定严格的问题:
MonadTrans
呢?PS:我明白我可以定义一个MonadTrans ScottyT
自己的实例,但是我应该吗?(回到问题链接)
所以我有这个工作示例(Snap + Postgres):
listBooks :: AppHandler ()
listBooks = do
results <- query_ "select * from books"
writeJSON $ (results :: [Book])
Run Code Online (Sandbox Code Playgroud)
作为练习,我试图用>>=
操作符重写它,但注释类型的需要杀死了美学.我想不出更好的东西:
query_ "select * from books" >>= return.(\x -> x :: [Book]) >>= writeJSON
Run Code Online (Sandbox Code Playgroud)
还有其他"更顺畅"的方式吗?(最好不指定包装单子类型)
java ×3
haskell ×2
hibernate ×2
orm ×2
postgresql ×2
monads ×1
pojo ×1
reflection ×1
scala ×1
scotty ×1