小编use*_*237的帖子

比较NULL

我正在设计一个动态SQL查询,它将根据目标表检查源表.我想比较源的行与目标的行,以检查差异.

CREATE TABLE TABLE_A (KEY INT, COL1 INT, COL2 INT)
CREATE TABLE TABLE_B (KEY INT, COL1 INT, COL2 INT)
Run Code Online (Sandbox Code Playgroud)

所以我创建了这个声明:

SELECT A.* FROM TABLE_A A
INNER JOIN TABLE_B B
ON B.KEY = A.KEY
AND (B.COL1<>A.COL1 OR B.COL2<>A.COL2)
Run Code Online (Sandbox Code Playgroud)

但只有col1和col2的值不为空时,这才有效.如果table-a col1为null且table-b col1为null,那么我认为它们相等.

我知道我可以在我的列周围添加一个ISNULL,但这是一个正在构建的动态查询,所以我只知道列名而不是数据类型.

有什么建议?

sql t-sql sql-server-2008

5
推荐指数
1
解决办法
153
查看次数

Hibernate HQL用于连接非映射表

我有一个名为"Kurs"的实体:

@Entity
public class Kurs {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long kursId;
    private String name;
    //Accessors....
}
Run Code Online (Sandbox Code Playgroud)

还有一个名为"Kategori"的实体:

@Entity
public class Kategori {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long kategoriId;
    private String name;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable (name = "KursKategori", joinColumns = {@JoinColumn(name = "kategoriId")}, inverseJoinColumns = {@JoinColumn(name = "kursId")})
    private List<Kurs> kursList;
    // Accessors....
}
Run Code Online (Sandbox Code Playgroud)

现在我正在构建一个KursDao,它将有一个方法来获取kategoriId的Kurs列表.但我无法让联盟为我工作.习惯于SQL我通常会认为查询应该是这样的:

getHibernateTemplate().find("from Kurs as k INNER JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId = ?", kategoriId);
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我不能得到这样的东西工作.我不想创建一个KursKategori类,因为它只是一个映射表.有没有办法将非映射表KursKategori连接到映射表kurs所以我只会得到正确的Kategori中的Kurs?

hibernate hql

5
推荐指数
2
解决办法
2万
查看次数

使用Log4J捕获并记录所有未处理的异常

我有一个使用Log4J作为日志框架的中型Java Web应用程序.现在我正在通过我的异常处理和日志记录来使我的应用程序更加健壮.它运行在Tomcat 6上,spring,hibernate和Struts2作为框架.

我想要做的是记录应用程序中发生的每个UNHANDLED异常.所以我可以记录它们,让log4j给我发电子邮件,然后看看我在哪里缺少try-catch块.最后相应地修改我的代码.

因为现在所有未处理的异常都直接打印到屏幕上,我的用户通常不会复制我的异常.

我知道我可以阅读tomcat-logs,但我想让它们由log4j处理,以便我可以收到有关每个此类异常的电子邮件.

有什么建议?

java log4j exception-handling

5
推荐指数
1
解决办法
4271
查看次数

JPA Criteria Disjunction

我试图学习和理解JPA标准.到目前为止,我在SQL方面非常有能力,并且在Hibernate Criteria和HQL方面非常有能力.

我试图用一个OR语句做一个相当简单的选择.

在纯SQL中,我的选择如下所示:

SELECT * FROM CHANGED_LOG
WHERE key1 = 52540 AND objectCode = 'Order'
OR key1 = 48398 AND objectCode = 'Package'
Run Code Online (Sandbox Code Playgroud)

这给了我每一行key1 = 52540和objectCode等于Order AND的每一行key = 48398和objectCode等于Package.这正是我想要的.

所以尝试用JPA标准(这看起来格外复杂......),我到目前为止最好的猜测是:

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();

    CriteriaQuery<ChangedLogBean> query = builder.createQuery(ChangedLogBean.class);
    Root<ChangedLogBean> from = query.from(ChangedLogBean.class);
    CriteriaQuery<ChangedLogBean> select = query.select(from);

    Predicate orderChangedLogBeans = builder.conjunction();
    builder.and(orderChangedLogBeans, builder.equal(from.get("key1"), orderId));
    builder.and(orderChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.OrderBean));

    Predicate packageChangedLogBeans = builder.conjunction();
    builder.and(packageChangedLogBeans, builder.equal(from.get("key1"), packageId));
    builder.and(packageChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.PackageBean));

    Predicate orderOrPackage = builder.disjunction();
    orderOrPackage.getExpressions().add(orderChangedLogBeans);
    orderOrPackage.getExpressions().add(packageChangedLogBeans);

    query.where(orderOrPackage);

    return entityManager.createQuery(select).getResultList();
Run Code Online (Sandbox Code Playgroud)

哇.一个简单查询的很多行...但是,这仍然从数据库向我的每一行返回.

我在这做错了什么?

谢谢你所有有用的答案:)

hibernate jpa criteria criteria-api

3
推荐指数
1
解决办法
5441
查看次数

查找多父层次结构的深度 - SQL

我有一个包含两列的表:mother - node这个表构成了一个层次结构的基础.母亲指的是一个节点.每个节点可以有多个母亲,每个母亲可以有多个孩子.这是通过多行完成的.如果mother = NULL,则该节点是顶级节点.可以有多个顶级节点,节点既可以是顶级节点,也可以是另一个节点的子节点.例如:

INSERT INTO MYTABLE VALUES(NULL, 2)
INSERT INTO MYTABLE VALUES(1, 2)
Run Code Online (Sandbox Code Playgroud)

我现在正在构建一个需要知道层次结构最大深度的过程.假设节点E是节点D的子节点,节点D是节点C的子节点.节点C是顶级节点,并且节点B的子节点是节点A节点A的子节点,它只是顶级节点.如果我们说节点A的深度= 0.那么在这种情况下,节点E的深度应为4.

有没有人知道如何建立一个能为我找到这个深度的陈述?它必须找到表中每个节点的最大深度,然后返回那些节点的最大值.

谢谢!

使用SQL Server 2008顺便说一句.

编辑:

它只是感兴趣的表的绝对最大深度.不是单个节点的深度.

sql t-sql sql-server-2008

2
推荐指数
1
解决办法
2752
查看次数

Spring MVC - 表单提交没有绑定对象

我是Spring MVC的新手,并试图实现一些看似非常简单的东西.但是,我无法让它工作或找到任何相关的例子.

使用带有注释的Spring MCV 3.1.我有一个只有一个选择列表的表单.提交此表单时,我希望能够将select-value的id提交给我的控制器.而已!

我不想将这个值包装在Binding对象中,我只想将它发送给控制器,最好是这样:http: //www.mydomain.com/admin/products?marketId = id

我的控制器看起来像这样:

@RequestMapping(value = "/admin/products", method = RequestMethod.GET)
public ModelAndView getProducts(@RequestParam("marketId") String marketId) {

    ModelMap model = new ModelMap();

    // Logic to find products by marketId is not shown
    // ...

    model.addAttribute("products", products);

    return new ModelAndView("products", model);
}
Run Code Online (Sandbox Code Playgroud)

我还没能创建一个编译的jsp,但这是我最新的jsp片段:

<form:form method="GET" action="/admin/products.htms" methodParam="marketId" >
    <form:select path="marketId" items="${marketList}" onchange="this.form.submit();"/>
</form:form>
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助或指出一些相关的例子,我将非常感激!我看了很多使用绑定对象来包装表单数据的例子,但是你可以看到我正在寻找一些更简单的东西.

干杯!

java spring spring-mvc

2
推荐指数
1
解决办法
3985
查看次数