我决定尝试将mybatis用于新项目.我对SQL非常熟悉,最近我对hibernate有一些不好的经历,所以我正在寻找一种更低级的DAO方法.
似乎相当不错,除了一件事,那就是处理集合.
我有两个POJO,组和用户,它们是多对多的.我已经决定了一个设计理念,即拥有集合的POJO应该只在保存时更新表之间的MM关系.因此,例如,当我保存具有用户集合的组对象时,设计理念规定应该已经保存用户,并且我只需要在数据库中保存组和group_user关系.
所以,对于界面中的saveGroup函数,我为mybatis做了这个XML映射:
<insert id="saveGroup" keyColumn="id"
parameterType="se.myapp.domain.Group">
<choose>
<when test="id == null">
INSERT INTO myapp_group (name, description)
VALUES
(#{username}, #{password});
</when>
<otherwise>
UPDATE myapp_group set name=#{name}, description=#{description}
where id=#{id};
</otherwise>
</choose>
<if test="users != null">
create temporary table tmpnewgroups (group_id integer, user_id integer);
insert into tmpnewgroups (group_id, user_id) values (
<foreach collection="users" item="user" open="" close="" separator="),()">
#{id},#{user.id}
</foreach>
);
insert into myapp_user_group(group_id, user_id)
select tmp.group_id, tmp.user_id
from tmpnewgroups tmp
left outer join myapp_user_group ug
on ug.group_id = tmp.group_id and …Run Code Online (Sandbox Code Playgroud) 所以,这就是问题所在.
我使用eclipse进行PHP项目,其中我们使用smarty模板来格式化html.有一天,我正在制作一个小的javascript并尝试使用通常的ctrl-space来完成代码.我得到了弹出窗口,询问我是否要为项目添加javascript支持,我想"好吧,我至少可以尝试一下,看看它是如何工作的".事实证明这是一个非常糟糕的主意,因为编辑html/smarty模板现在非常慢.
当我检查项目设置时,我有一个Javascript部分,我已经尝试过大多数事情,但我似乎无法一起禁用它.
那么,在我错误地激活它之后,我是如何禁用javascript支持的任何想法?
我在其中一台机器上遇到了一个奇怪的问题.
这是Debian Squeeze的全新安装,Postgres 8.4.10.
我在机器上安装了一些本地化,locale -a给出了:
C
en_US
en_US.iso88591
en_US.utf8
POSIX
swedish
sv_SE
sv_SE.iso88591
sv_SE.utf8
Run Code Online (Sandbox Code Playgroud)
在常规的Linux控制台中,我可以使用瑞典语本地化(åäöworks),但是当我进入psql控制台时,我无法使用本地化字符.无论我如何配置我的终端(尝试了我能想到的每一种编码).
数据库本身工作正常,我可以通过创建一个SQL文件并在那里保留插入来输入本地化的字符.这不是最有效的方式;-)
之前没有遇到过这个问题,我安装了不少机器.有没有人知道这可能是什么原因?
我得到了这个hibernate映射:
<class name="CoverageTerm" table="coverage_term">
<composite-id name="id" class="CoverageTermPK">
<key-many-to-one name="productTerm" class="ProductTerm">
<column name="termtype_id"></column>
<column name="product_id" ></column>
</key-many-to-one>
<key-many-to-one name="productCoverage" class="ProductCoverage" column="product_coverage_id"></key-many-to-one>
</composite-id>
<property name="data"/>
</class>
Run Code Online (Sandbox Code Playgroud)
这是一个简单的复合键映射,它与表productCoverage和productterm的复合键关系有关.
现在问题来自我的搜索功能:
public CoverageTerm getCoverageTermFromProductTermCoverage(ProductTerm productTerm, ProductCoverage productCoverage) {
Criteria critCt = getSession().createCriteria(CoverageTerm.class);
Criteria critCtId = critCt.createCriteria("id");
critCtId.add(Restrictions.eq("productTerm", productTerm));
critCtId.add(Restrictions.eq("productCoverage", productCoverage));
return (CoverageTerm) critCt.uniqueResult();
}
Run Code Online (Sandbox Code Playgroud)
这应该让我在"id"(这是主键,CoverageTermPK)上创建一个子标准并对其添加限制,但是当我运行它时,我收到错误消息:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.QueryException: could not resolve property: productTerm of: CoverageTerm
Run Code Online (Sandbox Code Playgroud)
这感觉很奇怪,不应该在那里得到CoverageTermPK吗?如果我尝试使用"data"属性的子标准来标准工作,我似乎无法在"id"子标准上获得PK.
关于为什么会发生这种情况的任何想法?
java ×2
composite ×1
console ×1
debian ×1
eclipse ×1
hibernate ×1
ibatis ×1
javascript ×1
linux ×1
mybatis ×1
persistence ×1
php ×1
postgresql ×1
psql ×1
spring ×1