小编Gra*_*ray的帖子

何时使用"ON UPDATE CASCADE"

我经常使用"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则将自动删除子级中的记录.这应该没问题.

  1. 这意味着当id更新父级时,"ON UPDATE CASCADE"会做同样的事情吗?

  2. 如果(1)为真,则意味着如果parent.id不可更新(或永远不会更新),则不需要使用"ON UPDATE CASCADE",就像它是AUTO_INCREMENT或者总是设置为TIMESTAMP.是对的吗?

  3. 如果(2)不成立,在其他什么情况下我们应该使用"ON UPDATE CASCADE"?

  4. 如果我(由于某种原因)更新了child.parent_id不存在的内容,它会被自动删除吗?

好吧,我知道,上面的一些问题可以通过程序测试来理解,但我也想知道这是否依赖于数据库供应商.

请说清楚.

sql foreign-keys foreign-key-relationship

407
推荐指数
6
解决办法
30万
查看次数

Thread start()和Runnable run()之间的区别是什么

假设我们有这两个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)

java concurrency multithreading runnable

209
推荐指数
9
解决办法
18万
查看次数

eclipse的git插件有多稳定?

我打算玩git,并想知道是否有人使用git插件进行eclipse

我看到它的版本是0.3.1,并且想知道是否有人知道它有多稳定/任何陷阱?


更新:

如果您使用的是最新版本的Eclipse,则"帮助"菜单中会显示"Eclipse Marketplace ..."链接.

在"查找"字段中输入"git".这告诉我EGit.

这在Popular插件列表中也非常高.

单击安装.比手动添加更新站点位置容易得多.

eclipse git version-control

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

这个线程加入代码是什么意思?

在这段代码中,两者的连接和分解意味着什么?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)

java multithreading

153
推荐指数
6
解决办法
15万
查看次数

在maven中指定java版本 - 属性和编译器插件之间的差异

我对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中指向的版本不同,会发生什么?

java maven-3 maven maven-compiler-plugin

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

是否可以从具有超时的InputStream读取?

具体来说,问题是写一个这样的方法:

int maybeRead(InputStream in, long timeout)
Run Code Online (Sandbox Code Playgroud)

如果数据在'timeout'毫秒内可用,则返回值与in.read()相同,否则为-2.在方法返回之前,任何生成的线程都必须退出.

为了避免参数,这里的主题是java.io.InputStream,由Sun(任何Java版本)记录.请注意,这并不像看起来那么简单.以下是Sun的文档直接支持的一些事实.

  1. in.read()方法可能是不可中断的.

  2. 将InputStream包装在Reader或InterruptibleChannel中没有帮助,因为所有这些类都可以调用InputStream的方法.如果可以使用这些类,则可以编写一个直接在InputStream上执行相同逻辑的解决方案.

  3. in.available()返回0总是可以接受的.

  4. in.close()方法可能会阻塞或不执行任何操作.

  5. 没有通用的方法来杀死另一个线程.

java timeout inputstream

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

无法执行dex:多个dex文件定义

我知道这个问题曾经在这里问过几次.但我还没有看到任何可能的解决方案.在我将项目"作为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你有什么想法吗?谢谢你的回复!

java android

125
推荐指数
11
解决办法
19万
查看次数

Hibernate错误 - QuerySyntaxException:用户未映射[来自用户]

我正在尝试从"用户"表中获取所有用户的列表,我收到以下错误:

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)

java hibernate

117
推荐指数
9
解决办法
22万
查看次数

113
推荐指数
5
解决办法
6万
查看次数

一对多和多对一关系之间的差异

一对多和多对一关系之间的真正区别是什么?它只是逆转了,那种?

除了这个之外,我找不到任何关于这个主题的"好的和易于理解的"教程:初学者的SQL:第3部分 - 数据库关系

sql relational-algebra relational-database

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