有时候我会把它们放在一起,有时候只有它们......有时候它们似乎也是这样.
有什么不同?
这是三个例子.他们有什么不同的做法?为什么我不能只为所有这些使用@GeneratedValue?
例1
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
Long id;
Run Code Online (Sandbox Code Playgroud)
例2
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private int userId;
Run Code Online (Sandbox Code Playgroud)
例3
@ElementCollection
@JoinTable(name="Address",
joinColumns=@JoinColumn(name="user_id")
)
@GenericGenerator(name="hilo-gen", strategy="hilo")
@CollectionId(columns = @Column(name="Address_id"), generator = "hilo-gen", type = @Type(type="long"))
Collection<Addr> listOfAddresses = new ArrayList<Addr>();
Run Code Online (Sandbox Code Playgroud) 我与 Lombok 一起工作没有任何问题,直到今天,我的 Intellij 自动更新到最新版本 2020.3 11 月 30 日构建。之后,不再识别任何 Lombok 注释。
我的 Java 项目仍然使用 Maven 从命令行构建,但项目中的注释完全被忽略,并且无法手动运行任何单元测试。
到目前为止我尝试过的事情:
没有任何效果。可能发生了什么?关于我可以尝试做什么的任何想法?
我用JUnit测试以下DAO:
@Repository
public class MyDao {
@Autowired
private SessionFactory sessionFactory;
// Other stuff here
}
Run Code Online (Sandbox Code Playgroud)
如您所见,sessionFactory使用Spring自动装配.当我运行测试时,sessionFactory保持为null并且我得到一个空指针异常.
这是Spring中的sessionFactory配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${jdbc.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
怎么了?如何为单元测试启用自动装配?
更新:我不知道它是否是运行JUnit测试的唯一方法,但请注意我在Eclipse中运行它,右键单击测试文件并选择"run as" - >"JUnit test"
在这两种情况下,我都会输出对象的内容:
alert(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)
要么
alert(obj.toString());
Run Code Online (Sandbox Code Playgroud)
所以...有什么区别?每个人的优点和缺点是什么?
是否有实际例子来说明差异?
如果我将一个角色转换为byte然后再回到char那个角色,那个角色会神秘地消失并成为别的东西.这怎么可能?
这是代码:
char a = 'È'; // line 1
byte b = (byte)a; // line 2
char c = (char)b; // line 3
System.out.println((char)c + " " + (int)c);
Run Code Online (Sandbox Code Playgroud)
一直到第2行一切都很好:
在第1行,我可以在控制台中打印"a",它会显示"È".
在第2行,我可以在控制台中打印"b",它会显示-56,即200,因为字节已签名.200是"È".所以它仍然很好.
但第3行有什么不对?"c"成为别的东西,程序打印出来? 65480.这是完全不同的东西.
我应该在第3行写什么才能得到正确的结果?
我在Eclipse中有两个Spring MVC项目,但Web内容处于不同的位置.
在一个应用程序中,它位于:
/WebContent
Run Code Online (Sandbox Code Playgroud)
在另一个应用程序下:
/src/main/webapp
Run Code Online (Sandbox Code Playgroud)
为什么?有什么不同?
有什么方法可以看出每个项目是如何创建的,以便以同样的方式创建一个新项目?
例如,这更好吗?
try {
synchronized (bean) {
// Write something
}
} catch (InterruptedException e) {
// Write something
}
Run Code Online (Sandbox Code Playgroud)
或者这更好:
synchronized (bean) {
try {
// Write something
}
catch (InterruptedException e) {
// Write something
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪一个是最佳实践.显然考虑到我必须同步try块中的所有代码.我不是在谈论我只能在try中同步部分代码的情况(在这种情况下,我认为在try中包含synch块会更好).我的疑问是关于我要同步所有try块的情况.
在OCJP认证的模拟中,我发现了这个问题:
1. StringBuffer s1 = new StringBuffer("abc");
2. StringBuffer s2 = s1;
3. StringBuffer s3 = new StringBuffer("abc");
How many objects are created ?
Run Code Online (Sandbox Code Playgroud)
他们说正确的答案是4,因为他们说:
s1 is one object, s2 is another object,
s3 is another object and "abc" is another String Object .
Run Code Online (Sandbox Code Playgroud)
但对我来说这是错误的,它应该是3,因为s1并且s2是同一个对象.你怎么看?
在我看过的所有MVC项目中,"service"和"DAO"类总是实现自己的接口.但几乎所有时间,我都没有看到过这种界面有用的情况.
在这些情况下是否有任何理由使用接口?不在"服务"和"DAO"类中使用接口可能会导致什么后果?我无法想象会有什么后果.
我在我的数据库中有100 000个地址(即记录).
它们中的每一个都有自己的坐标(纬度和经度).
现在,考虑到用户的地理位置(纬度和经度),我想在地图上仅显示5英里范围内的地址(使用Google maps v3 API).
这意味着通常只需要在10万个地址中显示5个或6个地址.
一种解决方案可以是检索所有记录并在Java中应用公式来计算每个地址的距离,并仅在它在范围内时显示它.
这将浪费处理能力,因为当我只需要在地图上显示5或6个记录时,我需要检索所有记录.
如何在数据库端(MySQL)解决此问题,以便仅返回5英里范围内的地址?