From 2260f545c22a50fdf49df5e240bfe371849465d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A5=8A=E6=85=B6=E5=A0=82?= Date: Thu, 4 Oct 2018 14:35:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=99=95=E7=90=86=E6=9F=A5=E8=A9=A2=E7=B5=90?= =?UTF-8?q?=E6=9E=9C=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF=20Collection=20?= =?UTF-8?q?=E7=9A=84=E8=A9=B1=EF=BC=8C=E7=AC=AC=E4=B8=80=E7=AD=86=E6=B2=92?= =?UTF-8?q?=E8=99=95=E7=90=86=E5=B0=B1=E4=B8=8D=E8=99=95=E7=90=86=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hibernate/I18NPostProcessor.java | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/ylhealth/ym/springtest/hibernate/I18NPostProcessor.java b/src/main/java/org/ylhealth/ym/springtest/hibernate/I18NPostProcessor.java index 1627b6d..af63c64 100644 --- a/src/main/java/org/ylhealth/ym/springtest/hibernate/I18NPostProcessor.java +++ b/src/main/java/org/ylhealth/ym/springtest/hibernate/I18NPostProcessor.java @@ -23,10 +23,7 @@ import org.springframework.context.i18n.LocaleContextHolder; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -/** - * Spring data 取出後進行多國語系的替換 - * 快取多語資料 30 分鐘 - */ +/** Spring data 取出後進行多國語系的替換 快取多語資料 30 分鐘 */ public class I18NPostProcessor implements MethodInterceptor { private Logger logger = LoggerFactory.getLogger(getClass()); private EntityManager em; @@ -45,19 +42,32 @@ public class I18NPostProcessor implements MethodInterceptor { process(result); return result; } - + + /** + * 處理查詢結果,如果是 Collection 的話,第一筆沒處理就不處理了 + * @param result + * @throws IllegalAccessException + * @throws InvocationTargetException + */ private void process(Object result) throws IllegalAccessException, InvocationTargetException { - if(result instanceof Collection) { - for (Object entity : (Collection)result) { - processEntity(entity); + if (result instanceof Collection) { + for (Object entity : (Collection) result) { + if (!processEntity(entity)) break; } } else { processEntity(result); } } - private void processEntity(Object entity) + /** + * @param entity + * @return 是否有處理 + * @throws IllegalAccessException + * @throws InvocationTargetException + */ + private boolean processEntity(Object entity) throws IllegalAccessException, InvocationTargetException { + boolean result = false; I18NTranslates i18n = entity.getClass().getAnnotation(I18NTranslates.class); if (i18n != null) { logger.trace("I18n process: {}", entity); @@ -75,11 +85,12 @@ public class I18NPostProcessor implements MethodInterceptor { } } } + result = true; } + return result; } /** - * * @param i18n * @param entity * @param clazz @@ -93,19 +104,20 @@ public class I18NPostProcessor implements MethodInterceptor { String language = LocaleContextHolder.getLocale().toString(); String table = i18n.table(); String idColumn = i18n.id(); - - Map> translateTable = translateTable(table, language, i18n.mapping(), idColumn); + + Map> translateTable = + translateTable(table, language, i18n.mapping(), idColumn); return translateTable.get(id); } - - private Map> translateTable(String table, String language, I18NTranslate[] mapping, String idColumn) { + + private Map> translateTable( + String table, String language, I18NTranslate[] mapping, String idColumn) { String key = "Table:" + table + "_" + language; Map> result = cache.getIfPresent(key); if (result == null) { logger.trace("translate query, table: {}", table); - String sql = - String.format("select * from %s where languageCode = ?", table); + String sql = String.format("select * from %s where languageCode = ?", table); Query query = em.createNativeQuery(sql); SQLQuery query1 = query.unwrap(org.hibernate.SQLQuery.class); query1.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); -- 2.26.2