我认为在数据库中建模一对多关系的常用方法是通过外键关系(即一个客户有很多订单 - >订单表获得对客户表的FK引用).
但是,Hibernate建议使用连接表来建模这种关系:
在拥有的实体中使用外键列的单向一对多并不常见,也不是真正推荐的.我们强烈建议您使用连接表进行此类关联(如下一节中所述).这种关联是通过@JoinColumn描述的.
为什么这"不是真的推荐".我认为使用FK是标准,并且连接表仅用于多对多关系?
我不喜欢创建连接表,因为数据模型看起来像关系是多对多的,而实际上它是一对多的.
这个建议在Hibernate文档中的原因是什么?
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),则旧的行为仍然存在.
我试图从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) <%@ 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) 这是一个关于编码风格和推荐做法的问题:
正如在问题的答案中解释的那样,在构造函数中放置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:相关问题(仅供参考):
我正在尝试编写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:
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二进制打印正常输出到错误流?
作为扩展问题" 在Eclipse中调试时修改/查看静态变量 ",我希望能够在Eclipse中调试时修改静态变量.
例如,局部变量,我可以在Eclipse的"变量"视图中选择变量,并使用上下文菜单"更改值..."来更改值.
对于任意静态变量,这是不可能的,因为它们不会出现在"变量"视图中.
我尝试了什么:
所以,如果我有一个像布尔MyClass.disableAllBugs这样的静态变量,有没有办法在调试期间更改MyClass.disableAllBugs?
抛开:我意识到即使拥有公共可变静态字段(即可变全局变量)也是非常糟糕的风格.但是有些代码库有它,然后在调试时修改它有时很有用.
git branch -d mybranch如果该分支未完全合并,Git将默认拒绝删除本地分支(via ).
但是,如果我删除了远程分支git push origin --delete mybranch,则如果分支未完全合并,则不会发出任何警告.
这看起来相当危险:自从我上次获取分支以来,其他人可能已将更新推送到分支,因此意外删除未合并分支似乎更可能是远程分支而不是本地分支.
那么为什么git不会警告我是否删除了一个远程未合并分支?有没有办法让它警告或否认删除?
注意:我意识到理想情况下我应该git pull删除它之前的分支,并确保它完全合并.但是,每个人都会犯错误,我希望有一个安全网.
如果我有一个包含集合字段的 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)将返回一个空集合 - 我对是否在任何地方指定这很感兴趣。
java ×5
branch ×1
coding-style ×1
collections ×1
constructor ×1
debugging ×1
eclipse ×1
git ×1
hibernate ×1
jackson ×1
jdbc ×1
jpa ×1
json ×1
merge ×1
mysql ×1
null ×1
objectmapper ×1
push ×1
redundancy ×1
security ×1
selenium ×1
servlets ×1
sql ×1
static ×1
super ×1
tomcat ×1
uri ×1
variables ×1