开发者

JDO + PostgreSQL Arrays

开发者 https://www.devze.com 2023-04-04 08:34 出处:网络
I\'ve implemented store_mapping extension but it currently uses ObjectAsStringMapping. As a result I can read array values from database but any insert or update causes underlying postgresql driver er

I've implemented store_mapping extension but it currently uses ObjectAsStringMapping. As a result I can read array values from database but any insert or update causes underlying postgresql driver error "INTEGER[]" is not "VARCHAR".

Is there any way to implement PGSQL arrays in JDO? It looks quite flexible with all that extension points. Any hints on extension 开发者_Python百科points I have to implement are appreciated, thanks in advance!

Edit:

I'm using postgres int8 as a bit field as a "replacement" for arrays after I figured out that I'll be okay with 63 possible values.

Sample class would be:

@PersistenceCapable(detachable="true", table="campaigns")
public class Campaign  implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long id;

    public List<Integer> regions;
}

And I think I have to implement some mapping from List to java.sql.Array but still didn't figure out how to do that. I could write extension and override default behavior but what extension-point should it be?


Looks like you need to build a custom field strategy to handle the mapping.

The key then is to transform the representation in this case to PostgreSQL array representation, namely a comma separated value (with " escaping text with any special characters but can be used on all values, double quotes are escaped by doubling them). The string is then bracketed betweed { and }. So ARRAY[1,2,3]::int[] becomes '{1,2,3}' or '{"1","2","3"}'

0

精彩评论

暂无评论...
验证码 换一张
取 消