我经常使用"ON DELETE CASCADE",但我从不使用"ON UPDATE CASCADE",因为我不太确定在什么情况下它会有用.
为了便于讨论,请看一些代码.
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
对于"ON DELETE CASCADE",如果id
删除了具有a的父级,parent_id = parent.id
则将自动删除子级中的记录.这应该没问题.
这意味着当id
更新父级时,"ON UPDATE CASCADE"会做同样的事情吗?
如果(1)为真,则意味着如果parent.id
不可更新(或永远不会更新),则不需要使用"ON UPDATE CASCADE",就像它是AUTO_INCREMENT
或者总是设置为TIMESTAMP
.是对的吗?
如果(2)不成立,在其他什么情况下我们应该使用"ON UPDATE CASCADE"?
如果我(由于某种原因)更新了child.parent_id
不存在的内容,它会被自动删除吗?
好吧,我知道,上面的一些问题可以通过程序测试来理解,但我也想知道这是否依赖于数据库供应商.
请说清楚.
假设我们有这两个Runnables:
class R1 implements Runnable {
public void run() { … }
…
}
class R2 implements Runnable {
public void run() { … }
…
}
Run Code Online (Sandbox Code Playgroud)
那么这有什么区别:
public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();
r1.run();
r2.run();
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
Run Code Online (Sandbox Code Playgroud) 我打算玩git,并想知道是否有人使用git插件进行eclipse
我看到它的版本是0.3.1,并且想知道是否有人知道它有多稳定/任何陷阱?
更新:
如果您使用的是最新版本的Eclipse,则"帮助"菜单中会显示"Eclipse Marketplace ..."链接.
在"查找"字段中输入"git".这告诉我EGit.
这在Popular插件列表中也非常高.
单击安装.比手动添加更新站点位置容易得多.
在这段代码中,两者的连接和分解意味着什么?t1.join()
导致t2
停止直到t1
终止?
Thread t1 = new Thread(new EventThread("e1"));
t1.start();
Thread t2 = new Thread(new EventThread("e2"));
t2.start();
while (true) {
try {
t1.join();
t2.join();
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 我对maven不太熟悉,在尝试使用多模块项目时,我开始想知道如何为父maven pom中的所有子模块指定java版本.直到今天我才使用:
<properties>
<java.version>1.8</java.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
但是在研究时我发现你也可以在maven编译器插件中指定java版本,就像那样:
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
然后将其包装到插件管理标签中以启用子poms的使用.所以第一个问题是在属性和maven编译器插件中设置java版本有什么区别?
我找不到明确的答案,但在研究过程中我发现你也可以用这种方式指定java版本:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Run Code Online (Sandbox Code Playgroud)
这表明编译器插件就在那里,即使我没有明确声明它.运行mvn包输出
maven-compiler-plugin:3.1:compile (default-compile) @ testproj ---
Run Code Online (Sandbox Code Playgroud)
和其他一些我没有声明的插件.那些插件默认是隐藏的maven pom的一部分吗?在属性和maven插件配置元素中设置源/目标是否有任何差异?
还有一些其他问题 - 应该采用哪种方式(以及何时不相等)?哪一个最适合多模块项目,如果在pom中指定的java版本与JAVA_HOME中指向的版本不同,会发生什么?
具体来说,问题是写一个这样的方法:
int maybeRead(InputStream in, long timeout)
Run Code Online (Sandbox Code Playgroud)
如果数据在'timeout'毫秒内可用,则返回值与in.read()相同,否则为-2.在方法返回之前,任何生成的线程都必须退出.
为了避免参数,这里的主题是java.io.InputStream,由Sun(任何Java版本)记录.请注意,这并不像看起来那么简单.以下是Sun的文档直接支持的一些事实.
in.read()方法可能是不可中断的.
将InputStream包装在Reader或InterruptibleChannel中没有帮助,因为所有这些类都可以调用InputStream的方法.如果可以使用这些类,则可以编写一个直接在InputStream上执行相同逻辑的解决方案.
in.available()返回0总是可以接受的.
in.close()方法可能会阻塞或不执行任何操作.
没有通用的方法来杀死另一个线程.
我知道这个问题曾经在这里问过几次.但我还没有看到任何可能的解决方案.在我将项目"作为Android应用程序运行"之前,如果我不清理它,我收到以下错误,并且必须重新启动Eclipse ...并再次清理.
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define
Lcom/jstun/core/attribute/MessageAttributeInterface;
Run Code Online (Sandbox Code Playgroud)
com.jstun.core ...是我的src文件夹的一部分,当然我无法删除它.即使我删除该包,另一个包将显示为错误,如:
Unable to execute dex: Multiple dex files define
Landroid/support/v4/app/ActivityCompatHoneycomb;
Run Code Online (Sandbox Code Playgroud)
自从更新到ADT 15后我看到了这个错误,我在Ubuntu上使用Eclipse Galileo你有什么想法吗?谢谢你的回复!
我正在尝试从"用户"表中获取所有用户的列表,我收到以下错误:
org.hibernate.hql.internal.ast.QuerySyntaxException: users is not mapped [from users]
org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)
Run Code Online (Sandbox Code Playgroud)
这是我写的添加/获取用户的代码:
public List<User> getUsers() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<User> result = (List<User>) session.createQuery("from users").list();
session.getTransaction().commit();
return result;
}
public void addUser(User user) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}
public void addUser(List<User> users) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
for (User user : users) {
session.save(user);
}
session.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
添加用户是有效的,但是当我使用getUsers函数时,我收到了这些错误.
这是我的hibernate配置文件:
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.default_schema">test</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> …
Run Code Online (Sandbox Code Playgroud) 在2018年6月18日之后连接到Maven Central/https://repo1.maven.org时,我遇到了上述错误.
一对多和多对一关系之间的真正区别是什么?它只是逆转了,那种?
除了这个之外,我找不到任何关于这个主题的"好的和易于理解的"教程:初学者的SQL:第3部分 - 数据库关系
java ×6
maven ×2
sql ×2
android ×1
concurrency ×1
eclipse ×1
foreign-keys ×1
git ×1
hibernate ×1
inputstream ×1
maven-3 ×1
runnable ×1
timeout ×1