JPA 自訂轉換 AttributeConverter

有時候因為資料存放的關係,會把陣列資料轉成字串存入DB的欄位裡面, 但是要處理資料的時候需要再轉成字串,這時候就需要用到下面這個例子
@Entity
@Table(name = "test")
public class test1 {

	@Id
	@Column(name="id")
	private int id ; 
	
	@Column(name="auid")
	private String auid ;
	
	@Column(name="ip")
	private String ip ;
	
	
	//如果只有這樣會報錯
	//@Column(name="test")
	//private List test=new ArrayList<>();
	
	
	//所以我們需要增加一個轉換標籤
	@Column(name="test")
	@Convert(converter = ListToStringConveter.class)//需要自訂一個轉換的class 
	private List test=new ArrayList<>();
	
		
	//get set 那些省略....
	
}
自訂轉換方式,先implements AttributeConverter<取出資料轉成自己要的資料型態, 存入DB的資料型態> 這裡用 List, String 當例子:
@Converter(autoApply=true)
public class ListToStringConveter implements AttributeConverter, String> {

		//陣列資料轉字串
	 	@Override
	    public String convertToDatabaseColumn(List attribute) {
	        if (attribute == null || attribute.isEmpty()) {
	            return "";
	        }
			String str = .....//自訂轉換的方式...
	       
	        
	        return  str ;
	    }
		
		//再把資料轉成陣列...
	    @Override
	    public List convertToEntityAttribute(String dbData) {
	        if (dbData == null || dbData.trim().length() == 0) {
	            return new ArrayList();
	        }

			String data = //dbData 做處理...自訂轉換的方式...
	        
			return Arrays.asList(data);
	    }

}

留言

這個網誌中的熱門文章

主鍵,唯一鍵,索引鍵 差別

免費架設你的Line Bot-(1)

jconsole 教學