2012-06-30 41 views
0

我的问题是如何在sql中将值插入到数据库中。我有一个可以有多个电子邮件的用户。我怎样才能将多个电子邮件插入一个对象?我不想将全新的用户对象添加到新行中。我只是想更新并追加新的电子邮件到数据库中的现有用户的电子邮件字段。SQL命令如何在数据库中追加(插入)值

我这样做:

JPA.em().createQuery 
     ("insert into User (email) select (email) from User where USERNAME=? VALUES (?)") 
     .setParameter(1, username).setParameter(2, email).executeUpdate(); 

,但它不工作,感谢帮助!

+0

这是怎么回事?你可以设置两个或多个ID的“电子邮件”? –

回答

2

从数据库中获取用户,用新的值连接现有的电子邮件,并保存用户。

JPA使用实体并为您生成SQL查询。您只能使用查询来从数据库中获取实体。这些查询是JPQL查询,而不是SQL查询。

而且它看起来像您的架构没有正确标准化。一个用户实体应具有许多电子邮件实体(OneToMany关联),而不是将所有电子邮件填充到用户的单个CLOB字段中。这就是你如何从数据库中搜索和获取单个电子邮件,并且如果你不需要它们,就可以让用户没有他们所有的电子邮件。

+0

太棒了,你教会了我一件新事物。我会将它注释为OneToMany,但代码concudyate看起来如何? ( – doniyor

+0

)如果您使用电子邮件实体和OneToMany关联,则不再有任何串联关系,用户实体具有一系列电子邮件实体,存储在各自的独立数据库表中。您创建一个新实例并保存,并添加它收集用户的电子邮件,您真的需要阅读关于JPA的书籍或教程,因为在编码之前您需要了解这些内容。 –

+0

我想,一个用户对象有一个名为'email'的varchar列,该列可以有多个值。 :( – doniyor

0

我不知道JPA但查询应该是

JPA.em().createQuery 
     ("insert into User (email) select (email) from User where USERNAME=? VALUES (?)") 
     .setParameter(1, username).setParameter(2, email).executeUpdate(); 

应该

JPA.em().createQuery("UPDATE User 
         SET email =? 
         WHERE USERNAME=? ") 
         .setParameter(1,email) 
         .setParameter(2,username) 
         .executeUpdate(); 
+0

不,设置和删除第一封电子邮件 – doniyor

+0

@ doniyor:是的,这将发生,这就是你正在寻找... –

+0

不,我正在寻找追加和未设置的方式。一个用户应该可以有更多的电子邮件,但如果我设置,旧的电子邮件将被覆盖,并在一天结束时,用户只有一个电子邮件了.. – doniyor