我观察到一个奇怪的事实(基于hibernate标记中的问题),人们仍在积极使用xml文件而不是注释来指定它们的ORM(Hibernate/JPA)映射.
有几种情况,这是必要的:
但我认为这些并不常见.
我的假设是:
还有其他可能的解释吗?
我们正在重用一个使用spring java-config(使用@Configuration)定义其bean的项目,并且在一个这样的类中它有一个@PostConstructinit方法.
这里的预期行为是什么 - 何时调用此方法?关于豆类,就是这样.即,这个方法的行为就像配置类是一个bean(它实际上是一个?)
我们观察到的是,根据操作系统,可以在@Autowired初始化进入配置类的bean之前调用它,因此最终使用不完整的依赖项.
我试图按照一个Servlet 3.0 教程是指@WebServletContextListener.但是,我在javaee-web-api-6.0.jar依赖项中找不到这样的注释(我正在使用maven).
那么,在哪里@WebServletContextListener?
我刚刚将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的问题.
该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) 我执行equals(),hashCode()并toString()通过在Bean所有可用字段我的实体.
当我尝试比较相等或者打印obj状态时,我在前端得到了一些Lazy init Exception.那是因为实体中的某些列表可以延迟初始化.
我想知道实现equals()和toString()实体对象的正确方法是什么.
我正在开发一个项目,我通过添加Hibernate注释来持久保存一些POJO.有一个问题我运行到是像这样的代码失败,因为Hibernate的尝试中的子字段映射Time_T到同一列(即startTime.sec和stopTime.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是否具备此功能,还是有其他合理的解决方法?
我注意到一个常见的模式是将JSP页面放在WEB-INF文件夹中(而不是WAR根目录).有什么不同?为什么这是首选?
我有一个界面:
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>以便编译)
因此,擦除,在其最简单的解释中,不是原因,或者至少它需要详细说明 - 类型存在,而且,您不关心类型解析,因为您已经有两个具有不同签名的方法.或者至少看起来如此.
试图解决什么应该是一个简单的问题.有一个Bytes列表,想要在函数末尾将它转换为字节数组.
final List<Byte> pdu = new ArrayList<Byte>();
....
return pdu.toArray(new byte[pdu.size()]);;
Run Code Online (Sandbox Code Playgroud)
编译器不喜欢我的语法toArray.如何解决这个问题?
java ×10
orm ×4
hibernate ×3
spring ×3
annotations ×2
jpa ×2
arrays ×1
autowired ×1
collections ×1
entity ×1
generics ×1
jsp ×1
servlet-3.0 ×1
servlets ×1
spring-orm ×1