我有一个实体"UserDetails",它有以下变量:
UserContact具有以下变量:
获取以下列表的Hibernate标准是什么:
userName ='sam'且city ='New York'的用户
我尝试了以下操作并获得了运行时异常,它无法识别变量'city':
List<UserLogin> list = session.createCriteria(UserLogin.class)
.add(Restrictions.eq("userName","sam"))
.add(Restrictions.eq("city", "New York"))
.list();
Run Code Online (Sandbox Code Playgroud) 我知道Struts2 Action类是线程安全的,因为操作放在Value Stack中.值栈依次是Action Context的一部分.由于Action Context是线程本地的,因此存储在Action Context(包括值栈)中的值对于每个线程都是唯一的.因此,Actions是线程安全的.
但考虑一下拦截器:它们非常有用,它们为程序员完成所有那些繁琐的小工作......比如验证,获取参数值等等.但需要考虑的是:拦截器可以在多个请求之间共享.那么这会使拦截器线程不安全吗?
考虑到这个问题,我试图在网上浏览一些与此问题相关的好文章.我发现了一篇非常好的文章,他们已经清楚地提到了一个示例拦截器如何不是线程安全的.
该网页是:http: //www.bullraider.com/java/struts2/tutorials/interceptors-and-thread-safety
我从这篇文章中得知,拦截器线程不安全的主要原因是拦截器只创建了一次.即每个拦截器只有一个对象.因此,当线程之间共享Interceptor 的相同实例时,实例字段不安全.
在文章的最后,提到有些情况,甚至拦截器都是线程安全的.但他们没有提到任何此类案件.我在网上冲浪找到答案......但是徒劳无功:(
任何人都可以告诉我或给我一个链接,在那里我可以找到如何使拦截器线程安全(或拦截器线程安全时的情况是什么)?
当然,我知道arraylist和linkedlist之间的性能差异.我自己运行了测试,看到了arraylist和linkedlist之间插入/删除和迭代的巨大差异,这是一个非常大的列表.
(纠正我,如果我错了)我们通常更喜欢arraylist over linkedlist,因为:
1)我们实际上比插入/删除更频繁地进行迭代.所以我们更喜欢迭代比插入/删除更快.
2)链表的内存开销远远超过了arraylist
3)没有办法在批量插入/删除时将列表定义为链表,在迭代时作为arraylist.这是因为arraylist和linkedlist具有根本不同的数据存储技术.
我错了第3点[我希望如此:)]?是否有可能将这两个数据结构的好处放在一个列表中?我想,数据结构设计师必须考虑到它.
java complexity-theory linked-list arraylist data-structures
我无法理解在Hibernate中使用@ManyToAny注释.在哪种情况下应该使用它?我用谷歌搜索了,但几个网站上的解释只是在我的头上反弹了......
有人能用一个简单的例子来解释吗?与@ManyToMany和@ManyToOne有什么不同?
我试图创建一些场景来演示跨线程共享变量时的可见性问题.我注意到在我测试的几乎所有情况下,如果在run()内部,我在使用共享变量的同一代码块中添加了System.out.println()语句,则无法生成可见性问题.我将举一个例子:
配置详细信息 - Oracle Java6 64位,Eclipse Juno SR 2
1)有可见性问题:
public class NoVisibility_Demonstration extends Thread {
boolean keepRunning = true;
public static void main(String[] args) throws InterruptedException {
NoVisibility_Demonstration t = new NoVisibility_Demonstration();
t.start();
Thread.sleep(1000);
t.keepRunning = false;
System.out.println("keepRunning is false");
}
public void run() {
int x = 1;
while (keepRunning)
{
//System.out.println("If you uncomment this line, the code will work without the visibility issue");
x++;
}
System.out.println("x:"+x);
}
Run Code Online (Sandbox Code Playgroud)
}
输出:线程保持无限运行
上面的相同代码,带有未完成的println()运行中的语句()
OUTPUT:
...
如果取消注释此行,代码将在没有可见性问题的情况下工作
如果取消注释此行,代码将在没有可见性问题的情况下工作
如果取消注释此行,代码将在没有可见性问题的情况下工作 …
当我们有peek()和poll()时,在Queue接口中使用element()和remove()会有什么用?
我检查了文档,发现这些方法也存在于java 7中.提到的唯一区别是element()和remove()会抛出空队列的异常.如果队列为空,我们可以手动抛出异常(如果需要的话).
是否真的有必要为这个唯一的区别保留两套方法?如果我们开始根据这些差异制作不同的方法,我认为java类和接口将充满大量的方法.这是一种真正的面向对象的风格吗?
编辑:只是为了让我的问题清楚,所以我不会得到相同的"你需要异常使用这个,否则使用"答案.我无法理解的是有很多这样的方法,其中有一个具有相同差异的额外方法将是有用的.那么为什么它仅在某些情况下实现而在其他情况下不实现?为什么同样的原则没有全面应用?我可以理解,也许只有语言创作者可以回答这些原因.我想知道这种方法是否符合OOP原则?
我不这么认为,例如:
// A class implementing two interfaces Interface1 and Interface2.
// Interface1 has int x=10 and Interface2 has int x = 20
public class MultipleInterface implements Interface1, Interface2{
public void getX(){
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们得到一个模棱两可的x.
虽然接口是解决方法模糊性的好方法,但我猜它们在变量的情况下会失败?
我对么?如果我遗失了什么,请赐教.
在我的程序中,我将逐行读取一个java文件,如果该行中有任何字符串文字,我将用(例如)"ABC"替换它.
有没有正则表达式这样做?
防爆.如果传递给我的程序的Java文件是:
public class TestClass {
private static final boolean isNotThis = false;
public static void main(String[] args) {
String x = "This is a test String";
dummyMethodCall();
if(isNotThis){
makeItThat();
System.out.println("work is done");
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么输出java文件应该是:
public class TestClass {
private static final boolean isNotThis = false;
public static void main(String[] args) {
String x = "ABC";
dummyMethodCall();
if(isNotThis){
makeItThat();
System.out.println("ABC");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我愿意知道正则表达式,它将帮助我检测所有字符串文字,并用我选择的特定字符串替换它们.
编辑:
对我来说真正的挑战是避免字符串中的那些引号字符.(如果有人在字符串中放置带有转义字符的引号字符)
java ×7
hibernate ×2
annotations ×1
arraylist ×1
interceptor ×1
interface ×1
linked-list ×1
orm ×1
queue ×1
regex ×1
string ×1
struts2 ×1