在Java的JPA(通过EmbeddedId或IdClass注释)中似乎只有第二类支持复合数据库键.当我读到复合键时,无论语言如何,人们都会不断发现,因为它们是一件坏事.但我不明白为什么.这些天使用复合键仍然可以接受吗?如果没有,为什么不呢?
我找到了一个同意我的人:http: //weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx
但另一个不这样做的人:http: //weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.html
是仅仅是我,还是人们无法区分复合键的适用与否?当表不表示实体时,即当它表示连接表时,我看到复合主键很有用.
一个简单的例子:
Actor { Id, Name, Email }
Movie { Id, Name, Year }
Character { Id, Name }
Role { Actor, Movie, Character }
这里的Actor,Movie和Character显然受益于Id列作为主键.
但是Role是一个多对多连接表.我认为创建一个id只是为了识别数据库中的一行是没有意义的.对我而言,主键显而易见{ Actor, Movie, Character }.它似乎也是一个相当有限的功能,特别是如果连接表中的数据一直在变化,一旦主键序列回绕到0,您就会发现主键冲突.
那么,回到最初的问题,使用复合主键仍然是可以接受的做法吗?如果没有,为什么不呢?
我有一个Java应用程序,我打包为RPM.理想情况下,我想将Java指定为依赖项.我需要在Fedora和RHEL环境中安装.问题是RHEL Java被称为'java',而Fedora不提供Oracle/Sun的发行版,而是从Oracle的网站手动下载.根据您选择的包,Oracle的Oracles分发称为"jre"或"jdk".
通常在RPM SPEC文件中我会写:
取决于:java> = 1.6
但是由于RHEL提供'java',并且Fedora通过Sun/Oracle提供'jre'或'jdk'(我不能使用OpenJDK),我有点绑定.到目前为止,文档还没有显示出'java> = 1.6 ||的方法 jre> = 1.6 || jdk> = 1.6'等因为Java包不在我的控制范围内,我不能只改变其中一个来指定'提供:Java'.
目前我只看到两个选择:
我不喜欢这两种选择.有没有其他方法可以实现Java依赖,其中提供者都有不同的名称?
编辑:第三个选项 - 为Fedora创建我自己的Java虚拟包,它依赖于Sun的JDK RPM.
我正在尝试编写一个需要了解集群中其他计算机状态(本地LAN)的工具.这适用于类似于VRRP和corosync/openais 的网络故障转移/高可用性系统,但我希望包含更多信息(例如接近实时的速度/性能特征),以便设备可以做出更明智的选择.这意味着使用比预先确定的基于权重的机制更复杂的协议:通过允许所有群集机器查看彼此的状态,他们可以共同商定哪个最适合作为主设备.
从我的搜索中,我还没有找到任何提供分布式状态机制的(C,C++或JavaME)库.理想情况下,我正在寻找能够定期广播/多播每个机器状态的内容,这样参与的机器就可以建立一个全局状态表,所有人都可以看到主人应该是谁.在这种情况下,状态是任意键/值对.
我宁愿不重新发明任何轮子,所以很想知道这里是否有人能指出我正确的方向?
这个java代码的线程安全性有什么问题吗?线程1-10通过sample.add()添加数字,而线程11-20调用removeAndDouble()并将结果打印到stdout.我记得在我的脑海里有人说过,以同样的方式在removeAndDouble()中使用它来分配项目可能不是线程安全的.编译器可以优化指令,使它们不按顺序发生.这是这种情况吗?我的removeAndDouble()方法不安全吗?
从这个代码的并发角度来看还有什么问题吗?我试图用java(1.6向上)更好地理解并发性和内存模型.
import java.util.*;
import java.util.concurrent.*;
public class Sample {
private final List<Integer> list = new ArrayList<Integer>();
public void add(Integer o) {
synchronized (list) {
list.add(o);
list.notify();
}
}
public void waitUntilEmpty() {
synchronized (list) {
while (!list.isEmpty()) {
try {
list.wait(10000);
} catch (InterruptedException ex) { }
}
}
}
public void waitUntilNotEmpty() {
synchronized (list) {
while (list.isEmpty()) {
try {
list.wait(10000);
} catch (InterruptedException ex) { }
}
}
}
public Integer removeAndDouble() {
// item declared …Run Code Online (Sandbox Code Playgroud) 为了提高我对并发问题的理解,我正在研究以下场景(编辑:我已经将示例从List更改为Runtime,这更接近我正在尝试的内容):
public class Example {
private final Object lock = new Object();
private final Runtime runtime = Runtime.getRuntime();
public void add(Object o) {
synchronized (lock) { runtime.exec(program + " -add "+o); }
}
public Object[] getAll() {
synchronized (lock) { return runtime.exec(program + " -list "); }
}
public void remove(Object o) {
synchronized (lock) { runtime.exec(program + " -remove "+o); }
}
}
Run Code Online (Sandbox Code Playgroud)
就目前而言,每个方法在独立使用时都是线程安全的.现在,我想弄清楚的是如何处理调用类希望调用的位置:
for (Object o : example.getAll()) {
// problems if multiple threads perform this …Run Code Online (Sandbox Code Playgroud) 我试图通过单个SQL语句获得注册课程的学生数量,但不使用子查询.到目前为止,我只能弄清楚如何使用子查询来做到这一点.还有另外一种方法吗?
请考虑以下数据库设置:
create table student (id integer not null primary key); create table course_enrolment (student integer not null references student, course integer not null); insert into student values (1); insert into student values (2); insert into student values (3); insert into course_enrolment values (2,20); insert into course_enrolment values (2,30); insert into course_enrolment values (3,10);
我想得到参加课程的学生人数.在这种情况下,它是2.
我可以使用子查询轻松实现这一点:
SELECT COUNT(*)FROM(从COURSE_ENROLMENT选择DISTINCT学生)作为数据;
我想在不使用子查询的情况下获取计数.
我正在使用Postgresql 8.3但我正在寻找与供应商无关的解决方案.
当鼠标点击Raphael JS生成的一些文本时,我正试图找到触发事件的方法.在Firefox中,点击事件完美地运行,在IE 7和8中(我没有测试过早期版本)既没有点击也没有mousedown工作.单击适用于其他raphael对象,例如示例中的矩形.
如何在以下演示中给出的文本上触发事件:
<html>
<head>
<script type="text/javascript" src="http://github.com/DmitryBaranovskiy/raphael/blob/master/raphael-min.js?raw=true"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
</head>
<body>
<div id="graph"></div>
<script language="javascript">
function setupImage() {
var canvas = Raphael(graph, 200, 200);
var alpha = canvas.text(100, 10, "Two Words");
alpha.attr("font-size", "20px");
var beta = canvas.rect(50, 50, 50, 50);
beta.attr("fill", "#3333cc");
canvas.safari();
var textClickEvent = function(event) {
alert("text clicked");
};
var boxClickEvent = function(event) {
alert("box clicked");
};
$(alpha.node).click(textClickEvent);
$(beta.node).click(boxClickEvent);
}
$(window).load(setupImage);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的直觉是我可能不得不尝试操纵DOM来包装文本,例如,A元素并在其上绑定.这似乎不是最干净的解决方案,所以我在这里询问是否有人有另一种方法.
javascript jquery internet-explorer javascript-events raphael