小编Bar*_*zek的帖子

javax.mail.Session有什么用?

我正在修一个负责发送电子邮件的班级.它看起来像这样(简化):

/* ... */
Properties props = System.getProperties();
props.put("mail.smtp.host", A_VALID_IP_OF_MAIL_SERVER);
Session session = Session.getDefaultInstance(props, null);  

try {
    Message msg = new MimeMessage(session);
    /* msg.setFrom(); msg.addRecipient(); etc. */
    Transport.send(msg);
    System.out.println("Sent!");
}
catch (Exception e) { /* ... */ }
/* ... */
Run Code Online (Sandbox Code Playgroud)

在我的工作,我设置sessionnull和我绝对惊喜的类仍然能正常工作.如果我传递nullMimeMessage构造函数并不重要.它不会抛出异常或任何东西.此外,该Transport.send()方法包括以下几行:

240 Session s = (msg.session != null) ? msg.session : 241 Session.getDefaultInstance(System.getProperties(), null);

因此,如果会话是null它,则只使用系统属性创建一个新会话.那么创建一个Session对象的目的是什么呢?MimeMessage如果你传递的内容无关紧要,为什么没有默认的构造函数呢?

我查看了许多使用javax.mail的例子,例如:来自Google的示例来自tutorialspoint的示例,他们都创建了一个Session看似毫无用处的对象.为什么有人这样做?

java jakarta-mail javax.mail

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

foreach循环是否用迭代器重写为for循环?

这篇文章解释了foreach循环直接对应于使用迭代器.如果我写一个foreach循环,它真的会转换成for for iterator?特别是给定的循环:

for(Integer i : createList()){
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

createList()无论如何,我保证总是只打一次电话吗?它被重写为:

for(Iterator<Integer> i = createList().iterator(); i.hasNext(); ) {
    System.out.println(i.next());
}
Run Code Online (Sandbox Code Playgroud)

在某种中间步骤或恰好产生与上述相同的字节码?

java foreach compilation syntactic-sugar

6
推荐指数
1
解决办法
1432
查看次数

命名查询以选择具有MAX(列名称)的行,使用另一列的DISTINCT

我有一个类似于这个问题中描述的情况,我写了一个相同的查询,但是当我尝试将其写为jpql命名查询时,我收到一个错误.

我的查询:

@NamedQuery(
            name = "findRankingsBetween",
            query = "SELECT rt FROM Rankingtable rt " +
                        "INNER JOIN " +
                            "(SELECT teamId, MAX(lastupdate) as MaxDateTime " +
                            "FROM Rankingtable " +
                            "GROUP BY teamId) grouped " +
                        "ON rt.teamId = grouped.teamId " +
                        "AND rt.lastupdate = grouped.MaxDateTime " +
                    "WHERE rt.lastupdate BETWEEN :from AND :to"
            )
Run Code Online (Sandbox Code Playgroud)

错误:

Error in named query: findRankingsBetween: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 79
Run Code Online (Sandbox Code Playgroud)

如何在jpql中正确编写查询?

java mysql hibernate jpa jpql

6
推荐指数
1
解决办法
7271
查看次数