| Revision | 2529 (tree) |
|---|---|
| Time | 2023-04-01 16:44:04 |
| Author | t_nakayama1971 |
(empty log message)
| @@ -6,6 +6,7 @@ | ||
| 6 | 6 | import java.sql.PreparedStatement; |
| 7 | 7 | import java.sql.SQLException; |
| 8 | 8 | import java.util.ArrayList; |
| 9 | +import java.util.Arrays; | |
| 9 | 10 | import java.util.List; |
| 10 | 11 | import java.util.Map; |
| 11 | 12 | import java.util.Objects; |
| @@ -24,9 +25,10 @@ | ||
| 24 | 25 | import org.hibernate.exception.ConstraintViolationException; |
| 25 | 26 | import org.hibernate.exception.DataException; |
| 26 | 27 | import org.hibernate.exception.LockAcquisitionException; |
| 28 | +import org.hibernate.internal.util.collections.CollectionHelper; | |
| 27 | 29 | import org.hibernate.jdbc.Work; |
| 28 | 30 | import org.hibernate.query.Query; |
| 29 | -import org.hibernate.transform.Transformers; | |
| 31 | +import org.hibernate.query.TypedTupleTransformer; | |
| 30 | 32 | |
| 31 | 33 | import common.db.dao.Dao; |
| 32 | 34 | import common.db.dao.DaoConstraintException; |
| @@ -610,9 +612,9 @@ | ||
| 610 | 612 | if (DaoUtil.isEntity(cls)) { |
| 611 | 613 | qry.addEntity(cls); |
| 612 | 614 | } else if (List.class.equals(cls)) { |
| 613 | - qry.setTupleTransformer(Transformers.TO_LIST); | |
| 615 | + qry.setTupleTransformer(ToListToupleTransformer.INSTANCE); | |
| 614 | 616 | } else if (Map.class.equals(cls) || !isJavaClass(cls)) { |
| 615 | - qry.setTupleTransformer(Transformers.ALIAS_TO_ENTITY_MAP); | |
| 617 | + qry.setTupleTransformer(ToMapToupleTransformer.INSTANCE); | |
| 616 | 618 | } |
| 617 | 619 | |
| 618 | 620 | for (var i = 0; i < qlist.size(); i++) { |
| @@ -731,4 +733,65 @@ | ||
| 731 | 733 | } |
| 732 | 734 | } |
| 733 | 735 | } |
| 736 | + | |
| 737 | + /** | |
| 738 | + * ToListToupleTransformer | |
| 739 | + * | |
| 740 | + * @author Tadashi Nakayama | |
| 741 | + */ | |
| 742 | + static class ToListToupleTransformer implements TypedTupleTransformer<List<Object>> { | |
| 743 | + | |
| 744 | + /** インスタンス */ | |
| 745 | + public static final ToListToupleTransformer INSTANCE = new ToListToupleTransformer(); | |
| 746 | + | |
| 747 | + /** | |
| 748 | + * {@inheritDoc} | |
| 749 | + */ | |
| 750 | + @Override | |
| 751 | + public Class<List<Object>> getTransformedType() { | |
| 752 | + return Factory.cast(List.class); | |
| 753 | + } | |
| 754 | + | |
| 755 | + /** | |
| 756 | + * {@inheritDoc} | |
| 757 | + */ | |
| 758 | + @Override | |
| 759 | + public List<Object> transformTuple(final Object[] tuple, final String[] aliases) { | |
| 760 | + return Arrays.asList(tuple); | |
| 761 | + } | |
| 762 | + } | |
| 763 | + | |
| 764 | + /** | |
| 765 | + * ToMapToupleTransformer | |
| 766 | + * | |
| 767 | + * @author Tadashi Nakayama | |
| 768 | + */ | |
| 769 | + static class ToMapToupleTransformer implements TypedTupleTransformer<Map<String, Object>> { | |
| 770 | + | |
| 771 | + /** インスタンス */ | |
| 772 | + public static final ToMapToupleTransformer INSTANCE = new ToMapToupleTransformer(); | |
| 773 | + | |
| 774 | + /** | |
| 775 | + * {@inheritDoc} | |
| 776 | + */ | |
| 777 | + @Override | |
| 778 | + public Class<Map<String, Object>> getTransformedType() { | |
| 779 | + return Factory.cast(Map.class); | |
| 780 | + } | |
| 781 | + | |
| 782 | + /** | |
| 783 | + * {@inheritDoc} | |
| 784 | + */ | |
| 785 | + @Override | |
| 786 | + public Map<String, Object> transformTuple(final Object[] tuple, final String[] aliases) { | |
| 787 | + final Map<String, Object> result = CollectionHelper.mapOfSize(tuple.length); | |
| 788 | + for (int i = 0; i < tuple.length && i < aliases.length; i++) { | |
| 789 | + final String alias = aliases[i]; | |
| 790 | + if (alias != null) { | |
| 791 | + result.put(alias, tuple[i]); | |
| 792 | + } | |
| 793 | + } | |
| 794 | + return result; | |
| 795 | + } | |
| 796 | + } | |
| 734 | 797 | } |