小编Boz*_*zho的帖子

为什么人们继续使用xml映射文件而不是注释?

我观察到一个奇怪的事实(基于hibernate标记中的问题),人们仍在积极使用xml文件而不是注释来指定它们的ORM(Hibernate/JPA)映射.

有几种情况,这是必要的:

  • 您正在使用提供的类,并且您想要映射它们.
  • 您正在编写一个API,其域类可以在没有JPA提供程序的情况下使用,因此您不希望强制使用JPA/Hibernate依赖项.

但我认为这些并不常见.

我的假设是:

  • 人们习惯于使用xml文件,感觉不舒服/不想学习使用注释方法.
  • Java 1.5之前的版本被强加于项目,并且没有任何关系
  • 人们不知道注释是xml映射的全功能替代品.
  • 支持遗留系统,因此改变方法被认为是有风险的
  • 人们担心将注释(元信息)与他们的类混合是错误的.

还有其他可能的解释吗?

java orm annotations hibernate jpa

37
推荐指数
3
解决办法
7078
查看次数

@Configuration类中@PostConstruct的预期行为是什么?

我们正在重用一个使用spring java-config(使用@Configuration)定义其bean的项目,并且在一个这样的类中它有一个@PostConstructinit方法.

这里的预期行为是什么 - 何时调用此方法?关于豆类,就是这样.即,这个方法的行为就像配置类是一个bean(它实际上是一个?)

我们观察到的是,根据操作系统,可以在@Autowired初始化进入配置类的bean之前调用它,因此最终使用不完整的依赖项.

java spring

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

Servlet 3.0:@WebServletContextListener在哪里?

我试图按照一个Servlet 3.0 教程是指@WebServletContextListener.但是,我在javaee-web-api-6.0.jar依赖项中找不到这样的注释(我正在使用maven).

那么,在哪里@WebServletContextListener

java annotations servlets servlet-3.0

36
推荐指数
1
解决办法
7990
查看次数

Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError:NULL错误

我刚刚将Spring 3.0.5迁移到3.1 GA.初始化期间我遇到运行时错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/spring/infrastructure-config.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: NULL
...
Caused by: java.lang.NoSuchFieldError: NULL
    at org.springframework.expression.TypedValue.<clinit>(TypedValue.java:32)
    at org.springframework.expression.spel.support.StandardEvaluationContext.setRootObject(StandardEvaluationContext.java:85)
    at org.springframework.expression.spel.support.StandardEvaluationContext.<init>(StandardEvaluationContext.java:74)
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:124)
    at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1299)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:210)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:182)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    ... 39 more
Run Code Online (Sandbox Code Playgroud)

这是我的xml.

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="MyPersistenceUnit" />
  </bean>
Run Code Online (Sandbox Code Playgroud)

这是java.lang.NoSuchFieldError: NULL关于什么的?没有3.0.5的问题.

java orm spring jpa spring-orm

35
推荐指数
1
解决办法
2万
查看次数

如何获得由FactoryBean spring创建的bean?

FactoryBean的可用于以编程方式创建,这可能需要复杂的实例化逻辑的对象.

但是,似乎由它创建的bean FactoryBean不会成为弹簧管理.这种解释是否正确?如果是这样,有什么好的解决方法吗?包含一个简短的代码示例来说明我的问题.

ApplicationContext的:

<bean id="searcher" class="some.package.SearcherFactory" /> 
<bean id="service" class="some.package.Service" /> 
Run Code Online (Sandbox Code Playgroud)

工厂实施:

public class SearcherFactory implements FactoryBean<Searcher> {

    @Override
    public Searcher getObject() throws Exception {
        return new Searcher(); // not so complex after all ;)
    }

    @Override
    public Class<Searcher> getObjectType() {
        return Searcher.class;
    }
    .... 
}
Run Code Online (Sandbox Code Playgroud)

工厂创建的类:

public class Searcher() {
      private Service service;

      @Autowired
      public void setService(Service service) {
           // never invoked
           this.service=service;
      } 
}
Run Code Online (Sandbox Code Playgroud)

java spring autowired

33
推荐指数
3
解决办法
7万
查看次数

实体等于(),hashCode()和toString().如何正确实施它们?

我执行equals(),hashCode()toString()通过在Bean所有可用字段我的实体.

当我尝试比较相等或者打印obj状态时,我在前端得到了一些Lazy init Exception.那是因为实体中的某些列表可以延迟初始化.

我想知道实现equals()toString()实体对象的正确方法是什么.

java orm entity hibernate

32
推荐指数
3
解决办法
3万
查看次数

自动为@Embeddable类的列名添加前缀

我正在开发一个项目,我通过添加Hibernate注释来持久保存一些POJO.有一个问题我运行到是像这样的代码失败,因为Hibernate的尝试中的子字段映射Time_T到同一列(即startTime.secstopTime.sec都试图映射到科拉姆sec,导致错误).

@Entity
public class ExampleClass
{
  @Id
  long eventId;

  Time_T startTime;
  Time_T stopTime;
}

@Embeddable
public class Time_T
{
  int sec;
  int nsec;
}
Run Code Online (Sandbox Code Playgroud)

由于会有很多出现这样在整个系统中,这将是很好,如果有自动追加的前缀列的名称(例如使列是一个选项startTime_sec,startTime_nsec,stopTime_sec,stopTime_nsec),而不必基于每个应用覆盖现场基础.Hibernate是否具备此功能,还是有其他合理的解决方法?

java orm hibernate

30
推荐指数
3
解决办法
9755
查看次数

为什么把JSP放在WEB-INF中?

我注意到一个常见的模式是将JSP页面放在WEB-INF文件夹中(而不是WAR根目录).有什么不同?为什么这是首选?

java jsp

30
推荐指数
3
解决办法
2万
查看次数

为什么不可能使用不同的类型参数多次实现通用接口?

我有一个界面:

public static interface Consumer<T> {
    void consume(T t);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够拥有:

public static class Foo implements Consumer<String>, Consumer<Integer> {
    public void consume(String t) {..}
    public void consume(Integer i) {..}
}
Run Code Online (Sandbox Code Playgroud)

它不起作用 - 编译器不允许您两次实现相同的接口.

问题是:为什么?

人们在这里问了类似的问题,但答案总是"类型擦除",即你不能这样做,因为类型在运行时被删除.

它们不是 - 某些类型在运行时保留.它们保留在这种特殊情况下:

public static void main(String[] args) throws Exception {
    ParameterizedType type = (ParameterizedType) Foo.class.getGenericInterfaces()[0];
    System.out.println(type.getActualTypeArguments()[0]);
}
Run Code Online (Sandbox Code Playgroud)

这打印class java.lang.String(如果我只保留Consumer<String>以便编译)

因此,擦除,在其最简单的解释中,不是原因,或者至少它需要详细说明 - 类型存在,而且,您不关心类型解析,因为您已经有两个具有不同签名的方法.或者至少看起来如此.

java generics

30
推荐指数
1
解决办法
1862
查看次数

Java:将字节列表转换为字节数组

试图解决什么应该是一个简单的问题.有一个Bytes列表,想要在函数末尾将它转换为字节数组.

final List<Byte> pdu = new ArrayList<Byte>();
....
return pdu.toArray(new byte[pdu.size()]);;
Run Code Online (Sandbox Code Playgroud)

编译器不喜欢我的语法toArray.如何解决这个问题?

java arrays collections

29
推荐指数
3
解决办法
5万
查看次数