Я понял это. Я закончил тем, что включил log4j, и я увидел исключение NullPointerException, исходящее из драйверов JDBC ... это никогда не бросало стек в исключение, которое я видел раньше, поэтому нигде не было следов первопричины. Мне нужно было указать параметры соединения внутри свойств JPA так:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="MagicPersistenceUnit" />
<property name="jpaVendorAdapter" ref="jpaAdapter" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<prop key="hibernate.connection.driver_class">${JDBC.Driver}</prop>
<prop key="hibernate.connection.url">${JDBC.ConnectionURL}</prop>
<prop key="hibernate.connection.username">${JDBC.Username}</prop>
<prop key="hibernate.connection.password">${JDBC.Password}</prop>
<prop key="hibernate.c3p0.maxSize">1</prop>
<prop key="hibernate.c3p0.minSize">1</prop>
<prop key="hibernate.c3p0.acquireIncrement">1</prop>
<prop key="hibernate.c3p0.idleTestPeriod">300</prop>
<prop key="hibernate.c3p0.maxStatements">0</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
<prop key="hibernate.c3p0.checkoutTimeout">0</prop>
<prop key="hibernate.c3p0.preferredTestQuery">SELECT * FROM dual</prop>
</props>
</property>
</bean>
Понятия не имею, почему он не выбирает параметры из источника данных, который я дал EntityManager.