Ошибка NoClassDefFound является туманной ошибкой и часто скрывает более серьезную проблему. Это not такое же, как ClassNotFoundException (которое вызывается, когда класс просто не существует).
NoClassDefFound может указать, что класса нет , как указывают javadocs, но обычно это бросается, когда после того, как загрузчик классов загрузил байты для класса и называет их «defineClass». Также внимательно проверьте свою полную трассировку стека на другие подсказки или возможные «причины» Исключения (хотя ваша конкретная обратная трассировка не показывает ни одного).
Первое, что нужно посмотреть, когда вы получаете NoClassDefFoundError, находится в статических битах вашего класса т.е. любая инициализация, которая имеет место при определении класса. Если это не удастся, он выкинет NoClassDefFoundError - предполагается, что он выкинет ExceptionInInitializerError и укажет детали проблемы, но, по моему опыту, они редки. Он будет выполнять только ExceptionInInitializerError при первом попытке определить класс, после чего он просто выбросит NoClassDefFound. Поэтому посмотрите на более ранние журналы.
Поэтому я бы предложил посмотреть код в этой строке HibernateTransactionInterceptor и посмотреть, что он требует. Похоже, что он не может определить класс SpringFactory. Поэтому, возможно, проверьте код инициализации этого класса, который может помочь. Если вы можете отладить его, остановите его на последней строке выше (17) и отлаживайте, чтобы попытаться найти точную строку, вызывающую исключение. Также проверьте выше в журнале, если вам очень повезло, может быть ExceptionInInitializerError.
В ответе Адриена нет необходимости создавать последовательно пронумерованный массив из двух последовательно пронумерованных массивов - вот несколько вариантов, которые будут:
array_values(array_unique(array_merge($array1, $array2)));
(ответ Адриена с нумерацией ключей впоследствии)
array_keys(array_flip($array1)+array_flip($array2))
(Поместите значения в ключи и используйте оператор объединения массивов)
array_merge($array1, array_diff($array2, $array1))
(Удалите общие значения из второго массива перед объединением)
Результаты тестов (для объединение двух массивов длиной 1000 в моей системе тысячу раз):
Тот же тест, но с двумя очень похожими массивами (по крайней мере, 80% дублируются):
Кажется, используя массив оператор союза, чтобы сделать ctual union - самый быстрый метод. Однако обратите внимание, что array_flip
безопасен, только если значения массива - это все строки или все целые числа; если вам нужно произвести объединение массива объектов, я рекомендую версию с array_merge
и array_diff
.
$result = array_merge_recursive($first, $second);
может быть полезно, когда у вас есть массивы с массивами внутри.
Оператор +
:
$x[0] = 4;
$x[1] = 1;
$y[0] = 9;
$y[2] = 5;
$u = $y + $x;
// Results in:
$u[0] === 9;
$u[1] === 1;
$u[2] === 5;
Обратите внимание, что $x + $y
! = $y + $x
Из кода в документации PHP: Операторы массивов :
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
При выполнении этот скрипт выведет следующее:
Union of $a and $b: array(3) { ["a"]=> string(5) "apple" ["b"]=> string(6) "banana" ["c"]=> string(6) "cherry" } Union of $b and $a: array(3) { ["a"]=> string(4) "pear" ["b"]=> string(10) "strawberry" ["c"]=> string(6) "cherry" }
Используйте array_unique
и array_merge
вместе.
используйте оператор «+» для этого. Смотрите ссылку Array Operators
Просто используйте $array1 + $array2
Это приведет к объединению обоих массивов.
OP не определил, является ли объединение [1 124] значение или [1 125], ключ и PHP имеет array_merge
для слияния значений и +
для слияния ключей. Результаты зависят от того, индексируется ли массив или ввел и , какой массив на первом месте.
$a = ['a', 'b'];
$b = ['b', 'c'];
$c = ['a' => 'A', 'b' => 'B'];
$d = ['a' => 'AA', 'c' => 'C'];
Видит array_merge
array_merge
array_merge($a, $b); // [0 => 'a', 1 => 'b', 2 => 'b', 3 => 'c']
array_merge($b, $a); // [0 => 'b', 1 => 'c', 2 => 'a', 3 => 'b']
+
, оператор Видит +
оператор
$a + $b; // [0 => 'a', 1 => 'b']
$b + $a; // [0 => 'b', 1 => 'c']
array_merge($c, $d); // ['a' => 'AA', 'b' => 'B', 'c' => 'C']
array_merge($d, $c); // ['a' => 'A', 'c' => 'C', 'b' => 'B']
$c + $d; // ['a' => 'A', 'b' => 'B', 'c' => 'C']
$d + $c; // ['a' => 'AA', 'c' => 'C', 'b' => 'B']