更新仅需要更新某些字段的模型的最佳做法是什么?
例如.
如果我有一个人模型:
姓名出生日期地址
还有一个我想要更新的表单:
地址
我目前可以看到的两个选项是:
如果可能的话,我更愿意使用hibernate模型,所以我现在正在使用#1.
有没有更好的办法?
我想知道如果java/scala在python中有"可以充当文件的字符串对象"作为StringIO吗?我认为这比写和读大量临时文件更好.我更喜欢scala,但java也应该没问题.
我正在尝试将某种代理实现为我的数据流的一部分,我希望在我的入站网关上接收http请求并通过出站网关传递它.我想保留所有查询字符串参数.我的网关配置是:
<int:channel id="searchRequestChannel" />
<int:channel id="searchReplyChannel" />
<int-http:inbound-gateway id="searchRequestInboundGateway"
supported-methods="GET"
request-channel="searchRequestChannel"
reply-channel="searchReplyChannel"
path="/services/normalization"
reply-timeout="50000"
/>
<int-http:outbound-gateway id="searchServiceGateway"
http-method="GET"
request-channel="searchRequestChannel"
url="http://localhost:8080/query"
extract-request-payload="false"
expected-response-type="java.lang.String"
reply-timeout="50000"
charset="UTF-8"
/>
Run Code Online (Sandbox Code Playgroud)
我预计它将如下工作:
客户端向入站网关/服务/规范化发送请求:
GET /服务/标准化q = cat&exclude = black
入站网关接收请求并通过searchRequestChannel将其发送到出站网关.
出站网关将整个请求发送到外部服务:
GET /查询q = cat&exclude = black
但在实践中,出站网关发送不包含任何查询参数的空请求:
GET /query
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,通过出站网关发送入站网关接受的http请求的最简单方法是什么.换句话说,如何通过spring集成工具实现简单代理?
我没想到线程会是这么困难的叹息。无论如何,我能想到在线程完成后执行函数的唯一方法是使用静态计数器在线程运行时递增。
if(++threadcounter==3){doSomething(); threadcounter =0;}
Run Code Online (Sandbox Code Playgroud)
我发现这不是一个好主意,因为线程计数器有时永远不会达到 4。
所以我使用了原子整数
if(atomicint.incrementAndGet()==4){doSomething(); atomicint.set(0);}
Run Code Online (Sandbox Code Playgroud)
计数器为 5 或 0,应用程序冻结。我不知道发生了什么。如何使用正确的计数器?谢谢
编辑:
我试图了解Hibernate中不同的对象状态.我尝试了以下操作,无法找到所显示行为的解释.有人可以帮忙吗?
以下是我要做的事情:在Employee表中插入一条新记录(empId是主键).在同一事务中,更新新添加的记录(使用查询,修改empName).然后当我检查持久对象的empName属性时,它继续显示旧的empName值.作为一个持久对象,我希望它能反映数据库中所做的更改.我不明白为什么没有.(我的hibernate配置文件已将所有设置为默认值,但"hibernate.hbm2ddl.auto"属性设置为更新)但是,在执行更新后,当我使用getEmpName返回的值设置持久对象的empName时(显示为旧的)由sysout表示的empName值,表中的最终数据显示了新的empName值(即我使用hql更新的值).请参考以下代码:
Transaction tx = session.getTransaction();
tx.begin();
Employee e1 = new Employee();
e1.setEmpId(1);
e1.setEmpName("Jack");
e1.setEmpAge(25);
session.save(e1);
System.out.println("before: "+e1.getEmpName()); //prints Jack
session.createQuery("update Employee set empName = \'Jack_new\' where id=1").executeUpdate();
System.out.println("after: "+e1.getEmpName()); //prints Jack
e1.setEmpName(e1.getEmpName()); //should update database
tx.commit(); //sets empName value to Jack_new, as seen in table
System.out.println("last: "+e1.getEmpName()); //prints Jack
Run Code Online (Sandbox Code Playgroud)