小编sle*_*ske的帖子

为什么Hibernate文档建议使用连接表来实现一对多关系?

我认为在数据库中建模一对多关系的常用方法是通过外键关系(即一个客户有很多订单 - >订单表获得对客户表的FK引用).

但是,Hibernate建议使用连接表来建模这种关系:

在拥有的实体中使用外键列的单向一对多并不常见,也不是真正推荐的.我们强烈建议您使用连接表进行此类关联(如下一节中所述).这种关联是通过@JoinColumn描述的.

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-association

为什么这"不是真的推荐".我认为使用FK是标准,并且连接表仅用于多对多关系?

我不喜欢创建连接表,因为数据模型看起来像关系是多对多的,而实际上它是一对多的.

这个建议在Hibernate文档中的原因是什么?

database-design hibernate foreign-key-relationship

9
推荐指数
1
解决办法
3203
查看次数

为什么Apache Tomcat将编码斜杠(%2F)作为路径分隔符处理?

Apache Tomcat(至少在Tomcat 6 看到脚注之前)在URI路径中处理百分比编码的斜杠(%2F),就像常规斜杠一样(即作为路径分隔符).

因此,例如可以访问Tomcat的servlets示例页面

  • http://localhost:8080/examples/servlets/ 并在
  • http://localhost:8080/examples%2Fservlets/

这对我来说没有意义.编码保留字符(如"/")的百分比编码的全部要点是避免将其视为保留字符(在本例中为路径分隔符).除此之外,此行为是(一)导致漏洞CVE-2007-0450的原因.但是,我认为一定有这样的理由.

  • 有没有任何技术原因可以让Tomcat将%2F视为路径定界符(确定,用于处理)%2F?

  • 是否存在某种情况,这种行为有用?


脚注:我意识到由于CVE-2007-0450,Tomcat的默认行为被更改为拒绝路径中的百分比编码斜杠.但是,如果禁用此检查(ALLOW_ENCODED_SLASH),则旧的行为仍然存在.

security tomcat uri servlets percent-encoding

9
推荐指数
1
解决办法
4950
查看次数

解析JSON时杰克逊错误"非法字符...只允许常规空格"

我试图从URL检索JSON数据,但得到以下错误:

Illegal character ((CTRL-CHAR, code 31)):
only regular white space (\r, \n,\t) is allowed between tokens
Run Code Online (Sandbox Code Playgroud)

我的代码:

final URI uri = new URIBuilder(UrlConstants.SEARCH_URL)
      .addParameter("keywords", searchTerm)
      .addParameter("count", "50")
      .build();
  node = new ObjectMapper().readTree(new URL(uri.toString())); <<<<< THROWS THE ERROR
Run Code Online (Sandbox Code Playgroud)

构建的网址是https://www.example.org/api/search.json?keywords=iphone&count=50

这里出了什么问题?我怎样才能成功解析这些数据?


进口:

import com.google.appengine.repackaged.org.codehaus.jackson.JsonNode;
import com.google.appengine.repackaged.org.codehaus.jackson.map.ObjectMapper;
import com.google.appengine.repackaged.org.codehaus.jackson.node.ArrayNode;
import org.apache.http.client.utils.URIBuilder;
Run Code Online (Sandbox Code Playgroud)

示例响应

{
    meta: {
        indexAllowed: false
    },
    products: {
        products: [ 
            {
                id: 1,
                name: "Apple iPhone 6 16GB 4G LTE GSM Factory Unlocked"
            },
            {
                id: 2,
                name: "Apple iPhone …
Run Code Online (Sandbox Code Playgroud)

java json jackson objectmapper

9
推荐指数
4
解决办法
1万
查看次数

SQLException:"无法使用executeQuery()发出数据操作语句"

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import ="java.sql.*" %>
<%@ page import = "com.mysql.jdbc.Driver" %>
<jsp:useBean id="vo" class="my.member.MemberVo"/>
 <jsp:setProperty property="*" name="vo"/>
<%

  Connection conn = null;
  Statement  stmt = null;
  PreparedStatement ps = null;

  String queryPerson = new String(); //Query statement
  String queryUserInfo = new String();
  String queryAccount = new String();

  try {
    Class.forName("org.gjt.mm.mysql.Driver");
    } catch (ClassNotFoundException e ) {
        System.out.println("JDBC error");
    }
  try{
   conn = DriverManager.getConnection("jdbc:mysql://mysql2.cs.stonybrook.edu/jaehyeolee", "root", "");
  } catch(SQLException e) {
      System.out.println("Database Error");
  }
   System.out.println("Database connected"); …
Run Code Online (Sandbox Code Playgroud)

java mysql sql jdbc

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

你把super()调用作为构造函数的开头吗?

这是一个关于编码风格和推荐做法的问题:

正如在问题的答案中解释的那样,在构造函数中放置super()是不必要的?,如果你为一个应该使用超类中的默认(no-arg)构造函数的类编写构造函数,你可以super()在构造函数的开头调用:

public MyClass(int parm){
  super(); // leaving this out makes no difference
  // do stuff...
}
Run Code Online (Sandbox Code Playgroud)

但你也可以省略通话; 在两种情况下,编译器都会像super()调用一样.

那么,你是否将呼叫置于你的构造函数中?

一方面,人们可能会争辩说,包括super()使事情更明确.OTOH,我总是不喜欢编写冗余代码,所以我个人倾向于将其删除; 然而,我经常在其他人的代码中看到它.

你有什么经历?你有一种或另一种方法有问题吗?您是否有规定一种方法的编码指南?

BTW:相关问题(仅供参考):

当没有其他构造函数时,是否有理由显式编写默认构造函数?

java redundancy constructor coding-style super

7
推荐指数
1
解决办法
1476
查看次数

使用Selenium Webdriver选择PrimeFaces单选按钮

我正在尝试编写Selenium测试来选择一个单选按钮.以下是'view Source'中的html.

<table id="surveyForm:surveyUrlType" class="ui-selectoneradio ui-widget" style="width:100%;margin-top:10px;margin-bottom: 10px;">
    <tbody>
    <tr>
        <td>
            <div class="ui-radiobutton ui-widget">
                <div class="ui-helper-hidden-accessible">
                    <input id="surveyForm:surveyUrlType:0" name="surveyForm:surveyUrlType" type="radio" value="TYPED" checked="checked" onchange="com.ssi.feasibility.surveyView.showSurveyType(this);">
                </div>
                <div class="ui-radiobutton-box ui-widget ui-corner-all ui-state-default ui-state-active">
                    <span class="ui-radiobutton-icon ui-icon ui-icon-bullet"></span>
                </div>
            </div>
        </td>
        <td><label for="surveyForm:surveyUrlType:0">Enter Survey URL</label></td>
        <td>
            <div class="ui-radiobutton ui-widget">
                <div class="ui-helper-hidden-accessible">
                    <input id="surveyForm:surveyUrlType:1" name="surveyForm:surveyUrlType" type="radio" value="FILE" onchange="com.ssi.feasibility.surveyView.showSurveyType(this);">
                </div>
                <div class="ui-radiobutton-box ui-widget ui-corner-all ui-state-default">
                    <span class="ui-radiobutton-icon"></span>
                </div>
            </div>
        </td>
        <td><label for="surveyForm:surveyUrlType:1">Upload Survey URLs</label></td>
    </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

我想选择"上传调查网址"单选按钮.

我尝试了几种不同的方法来选择单选按钮.以下是一些:

        $("#surveyForm\\surveyUrlType").click();

        This gives me the error : …
Run Code Online (Sandbox Code Playgroud)

java selenium selenium-webdriver

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

为什么"java -version"将其输出打印到错误流?

让我们尝试重定向标准错误java:

java -version 2> ~/error.txt
Run Code Online (Sandbox Code Playgroud)

error.txt 填充版本.

让我们尝试重定向标准输出:

java -version > ~/output.txt
Run Code Online (Sandbox Code Playgroud)

output.txt 是空的.

为什么java二进制打印正常输出到错误流?

java

7
推荐指数
1
解决办法
595
查看次数

在Eclipse中调试时修改静态变量

作为扩展问题" 在Eclipse中调试时修改/查看静态变量 ",我希望能够在Eclipse中调试时修改静态变量.

例如,局部变量,我可以在Eclipse的"变量"视图中选择变量,并使用上下文菜单"更改值..."来更改值.

对于任意静态变量,这是不可能的,因为它们不会出现在"变量"视图中.

我尝试了什么:

  1. 如果从"变量"视图的三角形菜单中选择"Java /显示静态变量",则可以查看和修改"变量"视图中列出的变量的静态成员变量.但是,我没有找到如何访问其实例未出现在"变量视图"中的类的静态成员.
  2. 您当然可以将静态成员作为表达式输入"表达式视图"(使用完全限定名称).然后,你可以看到价值,但"表达意见"没有一个选项来修改这个值(它不会允许修改表达式的成员,但不能表达自己,即使表达式是一个字段).

所以,如果我有一个像布尔MyClass.disableAllBugs这样的静态变量,有没有办法在调试期间更改MyClass.disableAllBugs?

抛开:我意识到即使拥有公共可变静态字段(即可变全局变量)也是非常糟糕的风格.但是有些代码库有它,然后在调试时修改它有时很有用.

eclipse variables debugging static

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

Git:拒绝通过push删除远程分支(如receive.denyDeletes),但仅当分支未完全合并时

git branch -d mybranch如果该分支未完全合并,Git将默认拒绝删除本地分支(via ).

但是,如果我删除了远程分支git push origin --delete mybranch,则如果分支未完全合并,则不会发出任何警告.

这看起来相当危险:自从我上次获取分支以来,其他人可能已将更新推送到分支,因此意外删除未合并分支似乎更可能是远程分支而不是本地分支.

那么为什么git不会警告我是否删除了一个远程未合并分支?有没有办法让它警告或否认删除?

注意:我意识到理想情况下我应该git pull删除它之前的分支,并确保它完全合并.但是,每个人都会犯错误,我希望有一个安全网.

git merge branch push branching-and-merging

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

JPA 是否为数据库中为空的集合属性返回“null”或空集合?

如果我有一个包含集合字段的 JPA 实体,例如

public class Post {    
  // [...]
  @OneToMany
  private List<String> tags;
Run Code Online (Sandbox Code Playgroud)

相应的数据库模式通常包含一个单独的表来存储标签,其中每条记录包含一个标签和对“Post”表的外键引用。

现在,当我从没有标签的数据库中加载一个“发布”实体(即不存在相应的“标签”记录)时,它的值Post.tags是多少?它会被设置为null,还是一个空的List?或者这是未定义的?

我在 JPA 规范中找不到这个。


注意:这与如果关系中的表为空,Hibernate 是否返回 null 或空集合是相同的问题,仅适用于 JPA 规范,而不是专门用于 Hibernate。

我知道大多数 JPA 实现(至少 Hibernate 和 EclipseLink)将返回一个空集合 - 我对是否在任何地方指定这很感兴趣。

collections null jpa language-lawyer

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