If you ever need inspiration for a day trip from London, try this. It's my Day Out Stimulus Matrix.
It's a bit like the Random Tourist Inspiration Generator I showed you last month, except outside the capital.
Also, it's not meant to be random, this time you simply scan the grid and see if anywhere takes your fancy.
If you require a genuinely random nudge, roll a 6-sided dice and restrict yourself to that column.
But really it's meant as more of a stimulus to make you go "oh yeah, that'd be a good day out".
All 84 of these locations are accessible by train from London. The seaside's along the bottom and up the right-hand edge.
Obviously not all these places are tip-top options (I mean, Luton?), but hey, it's your choice.
Also, yes, I know I've missed tons of places out, but if you want to go to the Isle of Sheppey, just go.
If now is not the time to go, maybe bookmark this page for a nice day in the summer (or click back to April 2018 at a later date).
And then, because all these locations are accessible by train, I wondered how much it'd cost to get there.
So what follows is the price of an off-peak return, travelling next Saturday.
These are all day return fares, costed from a central London terminus. I've picked the cheapest off-peak ticket, departing around 9am and returning later in the afternoon. I've rounded all fares to the nearest pound.
Yes, I know advance tickets can be a lot cheaper, but they're not available for several of these journeys. Also, advance tickets vary wildly in price as the day approaches. I wanted a level playing field - and a bit of freedom - so I've gone with off-peak returns instead. Concessions and railcard discounts could of course knock the prices down further.
In good news, around half of the train fares in this table cost £20 or less, so a day out needn't break the bank. A few particular bargains are Brighton for £12, Southend for £13, Bedford for £15, Milton Keynes for £16 and Cambridge for £17.
A lot of the best fares are on Thameslink, which runs approximately down the centre of the grid. Several of their fares cost less at weekends than off-peak during the week. Brighton is by far the cheapest destination on the south coast, the remainder of which cost more like £30, with Rye the most expensive of the lot.
Greater Anglia trains to Suffolk and Norfolk are shockingly expensive in comparison to similar distances via other operators. For example it costs more than twice as much to take a spur-of-the moment trip to Norwich than to King's Lynn. Prices also shoot up dramatically on the East Midlands line north of Bedford, especially if you compare Leicester to Birmingham or Peterborough, which are a similar-ish distance away.
Indeed Birmingham is pretty good value for money, so long as you're willing to take the slower train (the actual fares are West Midlands Trains £29, Chiltern £30.50, Virgin £55 - the latter an hour quicker than the former). Meanwhile how can Lewes be dearer than Seaford, or Hastings dearer than Dover, or Stansted dearer than Cambridge, other than thanks to the engrained iniquities of the UK rail ticketing system?
You can discuss the engrained iniquities of the UK rail ticketing system in this second comments box. Or you could simply explore the country on a day out by train, which should prove considerably more rewarding.
Dangleboss: We need a new gimmick for the cablecar. Are there any left?
Dangleminion: We've already done blind dates, snowmen, fine dining and Thunderbirds.
Dangleboss: But passenger numbers are still falling, down from 1.5m a year to 1.3m. We need a boost.
Dangleminion: It's OK, I have just the plan - champagne flights!
Dangleboss: Oooh, that sounds like a winner. But how does it work?
Dangleminion: Passengers prebook a return flight, and we give them a glass of champagne.
Dangleboss: Brilliant, Londoners love paying over the odds for an "experience" these days.
Dangleminion: And best of all, it's piss easy for us to organise.
Dangleboss: Perfect, that'll help our bottom line. Read out what we're promising.
Dangleminion: "You will be met on arrival at the cable car by a member of staff."
Dangleboss: Excellent. We already have lots of staff standing around doing bugger all.
Dangleminion: "You will then board your own private cabin..."
Dangleboss: Excellent. Most of our cabins are empty most of the time anyway.
Dangleminion: "...with a glass of Laurent Perrier Brut NV champagne."
Dangleboss: Excellent, the posh stuff. But won't that be expensive?
Dangleminion: Don't worry, we'll bulk-buy it, and the punters only get one glass.
Dangleboss: OK, let's throw in a free viewing guide as well. We have stacks of those.
Dangleminion: We should play some background music too, and make a feature of it.
Dangleboss: I reckon it's the simplest idea we've ever had. So little effort is required.
Dangleminion: No vinyl stickers, no specially commissioned animation, just an ice bucket and some plastic flutes.
Dangleboss: So, key question, what's the proposed price point for the Champagne Flight Experience?
Dangleminion: We were thinking £28 per person. We reckon several people might be willing to pay that.
Dangleboss: But a normal return flight on the cablecar is only £9. Our mark-up will be phenomenal.
Dangleminion: Rest assured, some punters will think £19 extra for a glass of champagne is a bargain.
Dangleboss: Normally we give a discount of £2 for using Oyster or contactless. Are we doing that here?
Dangleminion: Hell no, everyone pays full whack, in advance. We'll be quids in.
Dangleboss: I presume we're getting at least six glasses of champagne out of every bottle.
Dangleminion: Absolutely. We'll buy bottles in bulk, for say £20 each, and six passengers will pay us £168.
Dangleboss: I love this idea with every fibre of my being.
Dangleminion: No right minded Londoner could resist a fizztastic flight over the scrapyards of Silvertown.
Dangleboss: A few practical questions. Can they take this return trip in either direction?
Dangleminion: No, they have to start and end on the North Greenwich side. That way we only need one ice bucket.
Dangleboss: What about underage drinking? We'll be sued if we serve this stuff up to minors.
Dangleminion: Don't worry. If anyone looks under 25 we'll insist on seeing photo ID.
Dangleboss: Make sure that's passport or photocard driving licence only, we don't want to make this easy.
Dangleminion: Quite right. And the more pre-booked punters we turn away without proof of age, the more money we make.
Dangleboss: I presume we're not allowing solo drinking. What's the minimum spend?
Dangleminion: The minimum number of tickets per sale is two. And that means we'll take at least £56 every time!
Dangleboss: Hang on, there's a catch. The cablecar's byelaws prohibit consumption of alcohol, or being "in possession of an open container of alcohol."
Dangleminion: It's OK, we're covered. "For certain events or for customers in possession of the relevant experience ticket, alcohol may be served and consumed."
Dangleboss: Phew. Of course anyone could bring their own alcohol on board and open it in midair, and we'd never spot them.
Dangleminion: True. But only a suicidal drinker would pop a champagne cork inside a confined space dangling 90m above the Thames.
Dangleboss: You appear to have thought of everything. How soon can we start?
Dangleminion: As soon as I've nipped down to the cash and carry. Say Thursday 3rd May, from 7pm?
Dangleboss: And then every Thursday and Friday evening for the rest of the summer.
Dangleminion: Better than that, throw in every Saturday and Sunday from noon as well.
Dangleboss: OMG, that's 50 separate slots every week, and another 10 at bank holidays. We'll be rich.
Dangleminion: None of the slots have sold out yet. But yes, I think we will, I think we will.
This is the Next Train Indicator at Hackney Central station. Specifically it's the Next Train Indicator at the start of the connecting passageway to Hackney Downs, and shows the trains you might expect to catch when you've walked there. Except it's been programmed not to show all of them.
Trains at Hackney Downs disappear from the display when they're eight minutes fifty-nine seconds away. At nine minutes everything's fine, but one second later they blink off and are never shown again. This sometimes means that the next four trains are missing from the list. Just how long do TfL think this passageway is?
I walked the length of the passageway in two and a half minutes, but let's call it three. That's three minutes to complete the interchange on foot, whereas the next trains disappear after nine. During the 'invisible' period I could have walked all the way to Hackney Downs and back, then walked to Hackney Downs again. This, surely, is the most nanny-ish Next Train Indicator in London.
To be fair, the passageway emerges on platform 1 at Hackney Downs, so if the train you want to catch is arriving on another platform it takes longer to walk. It takes an extra two minutes to reach the farthest platform, because I timed it via the subway. But that's still only a total of five minutes walk from Hackney Central, and trains disappear after nine.
Meanwhile there's another Next Train Indicator at the other end of the connecting passageway, listing departures at Hackney Central, and trains disappear from this display when there are seven minutes to go. That's a nine minute cut-off towards Hackney Downs, and a seven minute cut-off towards Hackney Central. Perhaps someone at TfL thinks the passageway takes longer to walk in one direction than the other.
To be fair, the passageway emerges on platform 2 at Hackney Central, so if the train you want to catch is arriving on platform 1 it takes longer to walk. It takes an extra minute and a half to reach the westbound platform, because I timed it via the footbridge. But that's still only a total of four and a half minutes from Hackney Downs, and trains disappear after seven.
In TfL's defence, this isn't a passageway you'd want lots of passengers running down, and the respective subway and footbridge at either end could be hazardous too. But surely removing next train information nine minutes early, ahead of a three minute walk, is taking customer manipulation too far. Just how ill-informed do they want us to be?
On Thursday I went to seventeen free art exhibitions. Here, very briefly, is what I thought.
★☆☆ Yto Barrada: Agadir Bodies (until 20 May): Post-earthquake musings. Probably more interesting on Saturdays with added pyjama people.
★☆☆ John Copeland: Your Heaven Looks Just Like My Hell (until 28 May): I preferred the blurry cosmopolitan murals to his smudged acrylic nudes.
☆☆☆ Rachel Howard: Repetition is Truth – Via Dolorosa (until 28 May): Creamy vertical brushstrokes, the perfect exemplification of "I could have done that".
★★★ Under Cover: A Secret History Of Cross–Dressers (until 3 Jun): Amateur snaps (from 1880 onwards) of pioneers defying gender performance norms.
★★☆ Deutsche Börse Photography Foundation Prize 2018 (until 3 Jun): Eclectic. The four shortlisted artists coincidentally feature a Turner Prize nominee.
☆☆☆ Known Unknowns (until 24 Jun): The usual sparse set of big sploshy canvases, best viewed at fast walking pace.
★☆☆ Ian Cheng: Emissaries (until 28 May): Three-part digital myth, videogame style, in half a gallery. I tried getting into it, but no.
★★☆ Sondra Perry: Typhoon coming on (until 20 May): Meanwhile at the Sackler, huge wavy video walls with a hint of slavery. Immersive, but thin.
★★☆ Anthea Hamilton: The Squash (until 7 Oct): A solo performer wearing a gourd-like head inhabits the terrazzo and acts vegetable. Memorably surreal.
★★☆ Joan Jonas (until 5 Aug): Free annexe to the current £13 exhibition upstairs. Sparkly eco-aware video-led performance art.
★★★ Printing a New World: Commercial Graphics in the 1930s (until 19 Aug): A corridorful of 1930s graphics? Hell yes.
★★☆ The Artful Book: 70 Years of The Folio Society (until 1 May): Frontispieces and illustrations from a few select volumes.
★★☆ Without Walls: Disability and Innovation in Building Design (until 21 Oct): Thought-provoking exemplars of universal design.
★★☆ Art Capital: Art for Crossrail (until 6 May): Big arty spoilers for December. I think I'm looking forward to Bond Street the most.
★☆☆ ISelf Collection: Bumped Bodies (until 12 Aug): Taking the torso to extremes. Includes breasty rugby balls shoved through a chair.
★★★ Léon Wuidar (until 1 Jul): Abstract geometry, like some kind of Belgian semaphore. Just the one room, with notebook miniatures.
★★☆ Beatriz Milhazes - Rio Azul (until 1 Jul): Riotously colourful patterns, spangly shower curtains and a big tapestry. Proper vivid.
"The ladder of tree-lined, gems known as the 'Alphabet Streets' find themselves cozied in between the River and Fulham Palace Road. Primarily, the area is made up of beautifully refurbished, large semi-detached period homes, perfect for relocating professionals and families however there are various types of properties to suit a variety of living and recreational requirements. Many relocate to the area due to its family friendly nature and community spirit, with many of the homes here significantly bigger than those in surrounding areas."
This much sought-after alphabetical ladder climbs a Thames meander on Fulham's farthest edge, and skips up the alphabet until it reaches L for Langthorne Street. Fulham Palace blocks development at the southern end, with Fulham Cemetery providing a bit of open space to the north. Until the turn of the 20th century this entire area was fields and orchards, but then came the decent-sized villas... and the football club, namely Fulham FC, who first played at Craven Cottage in 1896. Today a much-improved stadium rubs up along Stevenage Road, occasionally feeding thousands of effusive fans through the Alphabet Streets, which the remainder of the time are a peaceful place.
Hedges in Bishop's Park Road are immaculately clipped. Cars parked in Cloncurry Street include Land Rovers, Porsches and an Aston Martin. Wisteria is burgeoning into bloom in Doneraile Street. Scaffolding in Ellerby Street suggests someone's getting an extension, or a basement, fixed. One house in Finlay Street sold for over £3m last year. Gresswell Street is cut short by some out-of-character flats. Few of the houses in Harbord Street have more than one doorbell, because these are still very much family homes, rather than the flats they might have become elsewhere in the capital. Builders are refacing frontages on Inglethorpe Street. The Londis on Kenyon Street is a very ordinary looking corner shop. Recessed porches with tiled infill characterise the length of Langthorne Street. And have you spotted the problem yet?
For a start, there's no street starting with A. Bishops Avenue existed long before the Victorian housebuilders moved in, thanks to Fulham Palace being immediately nextdoor, so presumably it was deemed best to kick off this alphabet from B. But more importantly there isn't, and never has been, a J. The Alphabet Streets leap straight from Inglethorpe to Kenyon, then splutter to a halt at Langthorne. The next street in the ladder is Queensmill Road, not M-something Street, which is odd given it was built at the same time. Alas these Alphabet Streets can only muster 'B to L, with J missing', which means there must be a better set of alphabetical streets somewhere else.
This estate in Queen's Park looks promising.
Not only are there alphabetical streets, somewhat haphazardly arranged, but there are also six numbered streets lined up from east to west. Maybe someone on the planning team was having an off-day, or simply lacking in inspiration, when the lists were drawn up. But again this particular location fails the J test, with its streetnames jumping unnecessarily from Ilbert to Kilravock in the middle of the estate. So I'm afraid there are only nine consecutive alphabetical streets in Queen's Park, with the longest chain running from A to I.
I believe only one place in London can beat nine, and that's Tooting.
Even better, I accidentally blogged about it two months ago, so I reckon I can now cut and paste that particular paragraph and reuse it.
Running east from Tooting station, between the railway and the River Graveney, a ladder of terraced streets stretches down to the Streatham Road. It's unusual in that the 'rung' streets are labelled alphabetically, from Ascot to Jersey, with a 100-year-old primary school tucked in between Frinton and Gunton, and a Chinese takeaway on the corner of Eastbourne. But I wonder how many residents know that this used to be a private golf course, which thrived here briefly at the turn of the 20th century before relocating to Mitcham when the lease ran out. It had a fine reputation, attracting rich and famous players including soon-to-be Prime Minister Arthur Balfour (who once beat the Clerk to the House of Lords by two strokes). But by 1906 the putting greens had been stripped, gravel pits dug into the tees, and a street of small houses called Links Road cut straight down the third hole. Housing pressure on the London outskirts is nothing new.
Returning this week, the trees were looking a lot blossomier even if the sun wasn't quite so bright. I spotted a cat padding round a mattress, and the occasional collapsed fence, but generally these are pleasant desirable homes. It helps that none of their front gardens are quite large enough to be parking spaces, so many retain flowers and shrubbery, and not just gravel or somewhere to dump the bins. These aren't identikit streets either, it's easy to spot material differences in construction from one end of the ladder to the other. The first street even rubs up against the smoker's exit round the back of Tooting Police Station. But somebody really needs to update the community noticeboard facing the final street, whose faded contents are still advertising events taking place at the end of summer 2015.
They make an intriguing selection of placenames, this alphabetical set. Several of the ten are seaside towns, generally on the south or east coast of England. Boscombe's just outside Bournemouth, Frinton's the posh end of Clacton, and Gunton is the next village north of Lowestoft. Jersey doesn't quite fit, being an island, while Hailsham is five miles from the East Sussex coast. But it's Ascot which really breaks the pattern, being absoutely nowhere near the sea (and the only one of the ten with a famous racecourse). It seems this is simply a list of placenames, semi-randomly selected, and nothing more.
So A-J is the best alphabetical sequence that London can manage... unless of course you know different. But outside London, surely somewhere stretches to K or beyond. If you're aware of any longer chains of alphabetical streets, do please let us know.
Today's post is about Next Train Indicators which refuse to tell you when the next train is. Specifically it's about Next Train Indicators in ticket halls and on station concourses, the ones you look up and see before you get to the platform. Here's one.
This is Pudding Mill Lane DLR station, and this is the Next Train Indicator in the ticket area. If the next train is 3 minutes away it'll tell you. If the next train is 2 minutes away it'll tell you. But once the next train gets to 1 minute away it disappears from the display, and it stays missing as the train approaches and rumbles into the platform.
If two trains are approaching, in opposite directions, both disappear from the display prematurely. At 2 minutes distant both can be seen, but at 1 minute both blink out, making it look like the next train is a lot further away than it really is. Why hide the information?
If it took two minutes to walk from the Next Train Indicator to the platform, this might make some sense. But it doesn't, it only takes 50 seconds. I checked by timing it. I set off from the Next Train Indicator just as the "2 mins" train disappeared, then crossed the concourse and climbed the stairs, not especially quickly. It took just under a minute, and I still got to wait on the platform for another minute before the train arrived. What on earth is going on?
It might be that TfL are worried about passengers running for trains. If you see a train is 0 minutes away you're very likely to run for it, and maybe injure yourself on the stairs, and that would look bad in the statistics. If you see a train is 1 minute away you might still run to catch it, and stumble, so maybe it's better you don't know. But if the only next trains you see are always at least 2 minutes away, and the platform is 1 minute away, then you'll surely walk and an accident is unlikely.
Except that doesn't wash either, as I discovered when I visited other DLR stations on the same line.
The DLR seems to have a default setting, whereby trains simply vanish from the off-platform displays two minutes before they arrive. And this is despite the fact that, at each of these five stations, it takes less than a minute to walk from the display to the train. The situation at Langdon Park is insane, given that the display is less than 10 seconds walk from the entrance to the platform. The Next Train Indicator on the platform is clearly visible, giving correct information, but trains still vanish from the external display with 2 minutes to go.
And just when you think there's a pattern, something breaks it.
Canary Wharf DLR station has a different kind of digital display, located in the centre of the concourse immediately underneath the platforms, and it always shows correct information. If a train's 1 minute away, it'll tell you. If a train is sitting in the platform ready to go, it'll tell you. One stop down the line at Heron Quays trains disappear with 2 minutes to go, but for some reason commuters at Canary Wharf are allowed to be trusted with the truth.
At nearby Canary Wharf tube station, no Next Train Indicators are provided at ticket hall level, so passengers have to head down to the platforms to see how trains are running. But several tube stations do provide Next Train Indicators on their concourses, so I tested out a few local ones.
With regard to timings, I didn't walk fast, and I stood on escalators rather than walking down them.
How intriguingly inconsistent. At Bow Road the Next Train Indicator in the ticket hall tells the truth... so I often reach the platform too late to catch the train I saw displayed upstairs. At Mile End the walk down to the platforms is shorter but this time the trains disappear with 1 minute to go. Many's the time I've sauntered down to the platform at Mile End and caught a train the display never told me would be there. Meanwhile Bethnal Green is a deceitful station, with trains blinking out of existence 2 minutes before they arrive even though it takes less than a minute to glide down the escalator... and less than that to walk. Why show the information at some stations but hide it at others, and why do this at different times?
I then checked out another bit of the Underground network, including a combination of sub-surface and deep tube lines.
No problems here, these ticket hall displays tell you exactly what's going on at platform level. Except that platform level is almost a minute away, so these are next trains that, most of the time, you won't catch. Why is it OK at these busy tube stations to maybe encourage passengers to run for their train, whereas at quiet DLR stations the Next Trains are deliberately blanked out?
To muddle things further, here's what's going on Green Park and King's Cross St Pancras.
Both these stations have big displays in the ticket halls showing the next three departures in both directions on each of three lines. It's wonderfully informative, but again, includes trains you're almost certainly not going to catch. Here trains remain on the display until they're one minute away, then vanish, but in every case it takes more than a minute to get down to the platform. Indeed hiking down to the Northern line from the Northern ticket hall at King's Cross takes 2½ minutes, so in this case it might be that you'll miss the first two trains shown.
It is great to have an indication of what the service is like down below before you commit to swiping through the gates. But again I have to ask, why the utter inconsistency from station to station?
And finally, back to the DLR at Bow Church, where researching today's post caused me to spot something I've never noticed before. That's funny, I thought, the next train seems to have been 2 minutes away for rather a long time. So I watched the upstairs display as the next train approached, and timed it, and discovered that some minutes are considerably longer than others.
Somebody has programmed the display to show '2 mins' for twice as long as it should do, including the entire minute when it should have read '1 min'. That's just... perverse. The only reason I can think of for manipulating the figures is again safety-related. Had you been told the train was 1 minute away, you might have run down the stairs. But when you're told the train is 2 minutes away, you walk, and still arrive on the platform in time to catch it. Clever, perhaps, or alternatively plain devious.
So it turns out that the next train at Bow Church DLR is only disappearing one minute before it arrives, even though the display has been contrived to make it look like two. I checked at Pudding Mill Lane, and it doesn't happen there. I've not yet checked if it happens anywhere else. But how unnervingly strange.
To summarise, numerous Next Train Indicators on station concourses won't always show you the time of the next train, because somebody doesn't want you to know when it's coming, and has deliberately fixed the system to hide the information one or two minutes prematurely. Not only is it misleading, it's also wildly inconsistent, and in the case of the longer disappearances more than a little creepy. I wonder, is there a Next-But-One Train Indicator at a station near you?
Bury boasts the north of England's largest market, indeed it's often been voted Britain's best. Bury Market's so good that 1500 coachloads of shoppers turn up every year (perhaps lured in by the offer of £5 Coach Driver Meal Vouchers and a dedicated Coach Driver's Rest Room). In common with many northern towns there's a large market hall, this one 60-stalls strong beneath a 'bird-wing' roof, ideal for giftware, fresh vegetables and getting your nails done. Another 300 stalls fill the sinuous blocks of the Open Market, technically not open but very-much shielded from the weather, where Julie's Hats sells dowdy headgear opposite the plastic tablecloths of the Fresh Bites Cafe. You could easily wander for much longer round here.
But I judged Bury Market's pride and joy to be the Fish and Meat Hall. This oval centrepiece is topped by two layers of curving webbed canopy, but the full airy design only hits you when you walk inside... and the whiff of fish and meat too. Each of the stalls has a large sloping display in front, ideal for laying out lush seafood or blood red mince. This is the place to come for Bury's most famous delicacy, black pudding, available here in more sizes and flavours than carnivores generally require. I ummed and ahhed over buying Best Mate a Chilli Black Pudding, unconvinced I could get it home in heatwave conditions without spoiling, finally deciding at the end of my visit hell why not, only to discover that at half past four all the produce is packed away and the slabs get sluiced down, so all I ended up with was wet feet.
According to the town council's official tourist website, "the Bury Cultural Quarter boasts many of the most fascinating museums in the UK." I'd beg to differ. That said I didn't make it past the lobby of the Fusilier Museum, "the one stop shop for all things Fusilier in the North West", so maybe that's where I slipped up. I did explore Bury Art Museum & Sculpture Centre opposite, inside what Pevsner described as "probably the best building in Bury." I liked the art, a thoughtful collection spanning mixed ages and genres, sparsely hung. The museum chunk in the basement was very brief, unwisely implying Bury doesn't have much history. Alas I didn't find any of the sculpture section, even though I walked round twice, so I guess I must've missed a badly labelled door somewhere.
What I did find easily, because it's housed in an enormous shed, is Bury Transport Museum. Stored inside this former goods depot is a horseshoe of old vehicles, notably local buses and a horse tram, but also delivery vans and motorbikes. Step inside the Yelloway Mobile Museum (I couldn't, it was locked) to discover more about a century of coach travel. Look in on the model railway layout (it wasn't running), or admire the wall liberally smothered in old railway station signs. I particularly liked the niche history of Metrolink, and a splendid wooden departures board which once graced the ticket hall at (oddly enough) Harpenden station.
The Cultural Quarter also contains the original market square, where the place of honour is reserved for a statue of Sir Robert Peel. This 19th century Tory Prime Minister was born and educated in the town, although never represented it, gaining his first parliamentary seat courtesy of a rotten borough in Galway. A quote from his resignation speech graces the back of the plinth, and his waistcoat is done up the wrong way round at the front. Close by is Bury Castle (Bury originally means castle), although all that can be seen today are a few buttresses in a bit of moat, the remainder having been razed after the Wars of the Roses. To summarise, some interesting museums, but by no means the most fascinating in the UK.
If Bury Transport Museum piqued your interest, the ELR will seal the deal. British Rail pulled out of Bury in 1991, and today it's linked to Manchester only by tram. The former station at Bury (Bolton Street) is now the hub of the East Lancashire Railway, a proper 12 mile heritage line you could spend a day on. I turned up just in time to see the last train steam off to the last station, which wasn't worth a £15 day ticket, but pootling around the period platforms was free, and the Trackside bar was very much open. I psyched myself up to order the craft beer with a French name in an acceptable Lancastrian accent, but unexpectedly it was off, so I pointed at a stout instead.
If you have the time, what's great about the ELR is that it actually goes somewhere worth going to, so I'm told, specifically Ramsbottom and Rawtenstall. Ramsbottom is overshadowed by the Peel Monument on Holcombe Hill, and every September hosts the annual Black Pudding Throwing World Championships, because of course they exist. Rawtenstall has The Whittaker museum and a dry ski slope, plus a Lidl beside the bus station, and no doubt lots of other interesting things if only I'd gone there. It pays to explore and travel when the opportunity arises, even across Wigan, Bolton and Bury.
The very centre of Bolton is atypically grand, and one of the very first public spaces in England to be pedestrianised. Victoria Square started out as the town's market place, then in the 1860s proved the ideal gap to plonk a neoclassical town hall. Its baroque clocktower is visible across town, and will reappear in today's post in two paragraphs' time. Round the back is Le Mans Crescent, a top-class 1930s civic addition, named after the most famous of Bolton's twin towns. Its sweeping curves house the courts, police station and library, plus the town's museum, which obviously is where I headed.
If you're of an age, you'll remember Fred Dibnah as TV's go-to steeplejack. He got lucky while repairing the clock at the top of Bolton Town Hall when a BBC North West film crew turned up seeking an interview. His enthusiastic delivery led to the commissioning of a full documentary, which won a BAFTA in 1979, then a series of other shows of an industrial heritage bent. This cheery Lancastrian could often be seen riding steamrollers, dodging collapsing chimneys or waxing lyrical about boilers, there being considerably fewer TV channels in those days. Fred lost his battle with cancer in 2004 at the age of 66, but his memory lingered on after a fan bought up his house in Bolton and opened it up as the Fred Dibnah Heritage Centre.
Alas the Fred Dibnah Heritage Centre has recently closed. The owner is seeking to retire, and couldn't find any buyer to pass the collection on to, so last month put the entire contents of the site up for auction. Most of the big stuff went, mostly to fans or museums, but plenty of smaller bits remained and these were returned to sale in a one-off open day the other weekend. And when that failed to shift everything he opened up again last weekend, before the entire property is auctioned off next month, and that's how fortunately I got to go inside.
Fred's home was a converted Victorian gatehouse on Radcliffe Road, unusually quirky from the front, and considerably larger from the rear. Out back are an extensive hotchpotch of sheds and workshops, perched on a bluff above a wooded river, creating quite the most adorable place for tinkering. I can't imagine what it was like with all the engines, ladders and heritage machinery lying everywhere, but at least the pithead gear Fred planned to drill his garden with hadn't yet been packed up and trucked away. Instead the workshop was open with the final leftovers, and boy did it feel strange rifling through a dead celebrity's yard sale.
Fred's spade heads, Fred's whiteboard, Fred's surplus masking tape, Fred's chairs, Fred's chock for steamroller, Fred's vacuum cleaner, several of Fred's grimy clamps, all these (and more) lay strewn about. Many were labelled "Make an offer", with the owner sat outside while a handful of us shuffled round mulling over the possessions. A lot of the Heritage Centre's souvenirs were now surplus to requirements, including DVDs and coasters, even branded bodywarmers, but I carried on scouring the worktops for something properly Dibnah. It took a couple of circuits, but finally in amongst the used tools and innumerable spare parts I found what I wanted, a bit grimy and only 99% functional, but perfect all the same. Which is why I am now the proud owner of Fred Dibnah's pocket calculator, and that was my Saturday made.
One stop north of Bolton, astride the A58 bypass, is a railway station with the most evocatively Lancastrian name - Hall i' th' Wood. What's more this twin-apostrophe'd curio is a relatively recent addition to the network, knocked up on the cheap in 1986, and earned its name from an astonishing historical building hidden just up the road. Cross the housing estate, pass through a patch of lowly bungalows and there at the top of the park is a Tudor woollen merchant's house, intricately bedecked with black and white timbering. It shouldn't have survived, but a famous invention and a wealthy soap magnate saved it, and the council now maintain Hall i' th' Wood as a museum.
You don't often get to wander around a 500-year-old middle class home, with all its beams and precipitous staircases, so that's already interesting enough. But the set of rooms above the porch was home in 1779 to a certain Samuel Crompton, whose invention of the spinning mule revolutionised Britain's burgeoning textile industry. It built on the earlier invention of the spinning jenny, a first step towards industrialisation, but which could only produce weaker types of yarn. Samuel's hybrid frame generated finer thread, but he never managed to make a profit from it after manufacturers spied on his design, then ripped it off, and he sadly died a pauper.
Step up Lord Leverhulme, founder of Lever Brothers, who was born in the town a century after Crompton and used his influence to buy the house. Hall i' th' Wood became a museum as early as 1902, which saved it from demolition, and both men are now remembered within. The original spinning mule is long gone, neither can you peer into the attic to see where Samuel hid it when anti-industrialisation riots spread across Lancashire. But even if that is only a replica in the corner, to be able to walk into a room that changed the world is always an evocative opportunity.
In 1936 George Orwell made a famous literary quest to seek out the soul of the industrial north, including three weeks amongst the slag heaps and muddy canals of Wigan. The poverty he found shocked him, but no semblance of Wigan Pier was forthcoming, the structure having been originally conjured up as a music hall joke. This of course hasn't stopped numerous tourists following in his wake, attempting to follow The Road To Wigan Pier, and I can now be included in their number.
In the 1980s the local council tidied up the post-industrial area around the canal basin to try to make something of the place. The largest warehouse became a museum called The Way We Were, focusing on the theme of "life in Wigan in Victorian times". Gibson's Warehouse, inside which narrowboats once moored up to unload, became a waterside pub called The Orwell. A demolished coal staithe was reinstated to ensure that there was a pier of sorts on site. Towpaths and boardwalks were spruced up, several heritage statues were scattered around for good measure, and even the Queen was drafted in for the official opening. Initially, at least, the place was a hit.
I turned up on a cracking spring morning to discover that time has not been kind. The museum closed in 2007 due to low visitor numbers. The recession killed off the pub in 2009. Both are still boarded up and nudging dereliction, one propped up by scaffolding with a legal notice on the door debarring squatters. The waterbus service no longer operates. One of the dockers portrayed as a statue has had the top part of his head sliced off and looks like a 'B' movie monster. If you're a local businessperson with a financial deathwish, 1.43 acres of land are currently up for sale as an "iconic development opportunity".
Across the canal the Wigan Pier nightclub was demolished in 2015 to make way for a new leisure nucleus called Wigan Pier Quarter, although none of the promised mixed-use leisure redevelopment has yet taken place. The only immediate success is Trencherfield Mill, now flats and offices, but housing a 2500HP steam engine which fires up for visitors on occasional Sundays. This short stretch of the Leeds and Liverpool Canal may still look impressive, but rings increasingly hollow. Wigan Pier is once again a victim of economic decline, perversely echoing what George Orwell found here eighty years ago.
'The Road To Wigan Pies' would more likely be a best seller today. The populace of Wigan adore their pies, which are very much the lunchtime snack of choice, in the same way that Cornwall loves pasties and Stoke-on-Trent lusts after oatcakes. I did my research beforehand and observed that family firm Galloways appear to be the purveyor of choice, so popped into one of their many turquoise fronted bakeries (immediately opposite the station) before the main rush started. You're never far from a pie shop in Wigan. I plumped for the classic meat and potato, resisting the temptation to coat it in a bread roll - the legendary pie barm. "That'll be £1.80," said the aproned lady, "and I've put a fork in there for you."
To enact a total Wigan cliche, I took my paper bag down to Wigan Pier and unwrapped it on the site of the former canalside nightclub. I'm not sure what size I was expecting, perhaps something narrower and thicker, but I was pleased enough with a scaled-down version of a full-size family savoury. The pastry was lush, and irregular enough to confirm a hand-finished means of production. As for the filling, well, let's just say there was a lot more potato than meat, but mixed together into a smooth peppery gloop which tasted a lot better than it looked. It was simply delicious, and deliciously simple, and I'm gutted to discover that Galloways have no outlets further south than St Helens. Next time, with gravy.
Northern Soul brought Wigan to life, specifically overnight at the Wigan Casino. Crowds came from across the region to this former ballroom to enjoy a wild night dancing to classic tunes rarely spun down south, always ending up with the same three songs by Tobi Legend, Jimmy Radcliffe and Dean Parrish. In the Museum of Wigan Life* I watched a short documentary showed excitable youths queuing to enter the building, insistent in vox pops that none of the rest of the week mattered, while management stashed vast piles of pound notes behind the paydesk. Once inside they packed the dancefloor with their exuberant gyrations, flares flapping, on this occasion to the insistent soundtrack of What by Judy Street. Between 1973 and 1981 there was nowhere like it.
And then the club closed, and the next year it burnt down, and today the town's main shopping centre covers the site. Stepping inside the Grand Arcade is no cathartic experience, the muzak choice is far poorer, and as tributes go the Casino Cafe food court in the upper mall lacks emotional nourishment. What there is downstairs is a statue of George Formby, Wigan's famous cheeky ukulelist, and my guess is that the Queen would far rather have attended its unveiling that that dull pier thing down the road. All the town's current nightclub options are crammed down King Street, from 80's-themed parties to bierkellers, in great enough numbers to suggest that escapism is still an essential part of life in Wigan.
* The Museum of Wigan Life is a one-gallery whistlestop tour of the town's heritage, from Roman encampments to rugby league success, housed in the town's former main library. If I'd been asked to guess I'd have assumed the displays were at least 20 years old, but apparently they only date back to 2010, so goodness knows what they spent the £1.9m restoration grant on.
Irish playwright George Bernard Shaw was one of the celebrities of the first half of the 20th century. He hated it. People loved his scripts, admired his principles and clamoured for his philosophies, but George would rather have been left alone. So in 1906 he and his wife found themselves a former rectory in the deepest wilds of Hertfordshire and hunkered down. After all, in Hertford, Hereford, and Hampshire, hurricanes hardly ever happen.
Shaw was born in Dublin in 1856, the youngest child of an awkward marriage. He hated school but adored education, soaking up ideas from a wide range of books, and left to become an office clerk at the earliest opportunity. At the age of 20 he followed his mother to London, where she hoped to become a music teacher, and established himself as a theatre critic. An increasing interest in politics brought him to greater prominence, sealed in 1902 by his first super-successful play, Man and Superman.
Shaw's Corner is a lovely Edwardian villa, decked out in Arts and Crafts styles, opposite what passes for Ayot St Lawrence's busiest road junction. A National Trust guide will greet you out front and deliver a potted biography, while another waits in the hall to point you in the right direction. Each room has been left as it was when George died in 1950, indeed the deal with the National Trust was agreed in advance, and he spent his last years leaving all his accoutrements precisely where he wanted to cultivate the right image for posterity.
You'll see his parlour and his study, his bedroom and his capacious bath. You'll see writings and paintings, plus a shaggy-bearded bust by Rodin (although it's nowhere near as red as the real thing). Charlotte removed all her stuff before she died, so her bedroom has become a museum room. The current exhibition is suffragette-related - George was a huge supporter - but the cabinet beside the window merits closer inspection. George Bernard Shaw is the only person (thus far) to have been awarded an Oscar and a Nobel Prize. Lift the drape to see his statuette and his signed certificate, then covet both.
The garden's charming too, with its stripy lawn and swathe of daffodils. Hidden behind the shrubbery is George's writing shed, a tiny hut which swivelled to face the sun (presumably when the trees opposite were somewhat shorter). You can't go in but you can peer inside to see an ornament-topped desk, a wall-mounted telephone and a comfy looking bed. Eliza Doolittle and Professor Henry Higgins sprang forth right here. George was independent to the end, but at the age of 94 he fell off a ladder while pruning a tree in the adjacent orchard, and the injuries sadly led to his death. For an ardent vegetarian, it's ironic that an apple finished him off.
Ayot St Lawrence's temple-like 18th century church is all the more amazing for popping up in a field. It's loosely modelled on something the architect saw in the Greek Islands, and unusually has its main door at the eastern end because that way the portico faced the landowner's mansion. Step inside (you probably can) to be further wowed by the lofty interior, the cruciform tiled floor and the altar in the coffered apse. Despite no longer having any parish to speak of, services are still held here on the second Sunday in the month, and I don't know who arranges the flowers but they do a dazzling job.
The rest of the fun comes in getting to Ayot St Lawrence in the first place. Even by car it involves a series of increasingly narrow lanes, so perfectly did George Bernard Shaw select his hideaway. Buses refuse to venture this far, and even the nearest station is five miles distant. I hiked in from Welwyn North and back to Welwyn Garden City, to make a day of it, eyeing up the early bluebells and that luscious shade of green you only see in spring. I can recommend following the disused railway, then bearing off up the boundary track across the Codicote Road. You could follow in my footsteps. Wouldn't it be loverly?
When planners run out of inspiration for street names, they turn to ordinal numbers. New York's Fifth Avenue is world famous, and Manhattan's grid goes up to 228th Street.
London ascends no such lofty numerical heights. But there is one chain of numbered streets in Newham, specifically Manor Park, which rises sequentially from First to Eighth.
This stretch of the Romford Road was being built up at the end of the 19th century. Long parallel streets were carved off across the fields, linking up with the soon-to-be shattered peace of Church Road. The street you'd think would be number one got called Meanley Road, but then the numbers kicked in, in order, until the existing wiggle of Little Ilford Lane ended the chain. First to Fourth Avenues run uninterrupted, a hundred-and-something terraced houses in each, but Fifth is stunted by the presence of a large primary school and its house numbers barely makes the thirties. Walk the streets near hometime and a stream of headscarved mothers lead their children home, while their older siblings seek out Haribo and/or fried chicken on the main road.
This is Eighth Avenue, a brief dead end, and the last in the chain. It begins between a shuttered shop unit and a tyre dealers - London Tyres, whose interior is a maelstrom of rubber, mechanics in overalls and cars propped overhead for inspection. The next business is motor-driven too, the edge of Newham being part of the blurred zone where Londoners start to prefer cars to public transport. Vehicles are parked all the way down the road, providing manoeuvring challenges for any resident hoping to make a swift departure. Someone has a tropical palm in their tiny front garden, others have bins. Multiple satellite dishes hint at multiple occupancy. The further down the street you go, the less the trees look like trees and more like stunted trunks. And right down at the far end is a locked gate, behind which an Islamic wholesaler and a vintage 1960s clothing company hold court. True believers, mods and skinheads take note.
But we can beat Eight. Simply wait a few months and hop onto Crossrail, straight through the city and out the other side, to the environs of Hayes and Harlington. Hayes can manage Nine.
The Townfield Estate was laid out between the wars on fields north of what we now know as Hayes, but was previously called Botwell. The leaf-shaped layout of the estate bears the firm hand of council planners, its spine road (Central Avenue) reaching out via several narrower streets to either side. Rather than link everything up the planners preferred quiet backwaters - grassy squares where there was room, and brief cul-de-sacs where there was not. The squares got names, but the cul-de-sacs were numbered, generally in pairs, with Ninth somewhat out on a limb. Here's First Avenue.
'Avenue' feels a bit strong for what's essentially a terse dead end. There's never been any attempt at a pavement - back in the 1920s it wouldn't have been required, horses and carts being easier to dodge than those new-fangled cars. I bet that lamppost is an original, a single light source leading towards two sets of facing cottages, each of a size which these days looks impressively spacious. This was a working class neighbourhood back in the day, and the estate still retains that feel, though with considerably more diversity than before.
Second to Fifth Avenues look somewhat similar, while Sixth to Eighth boast larger, slightly more prestigious council homes. Four hundred and something pounds now pays the mortgage, up from five figures at the turn of the century, and probably some paltry monthly rental payment at original completion. Seventh Avenue has been resurfaced this week, so looks the most modern of the lot. One thing which intrigued me was how the street signs teeter on the threshold of what Hillingdon council can cram onto one line.
Third, Fifth, Sixth and other five-letter names merit long thin signs, whereas six letters or more requires a second line and a deeper rectangle. Seventh and Eighth Avenues also feature more up-to-date fonts, designs and layout than the others, for anyone with an interest in street sign evolution.
And finally there's Ninth Avenue. Its entrance has a more secluded ambience than the others, courtesy of two high hedges, and the short walk down to where the houses begin feels fractionally longer. Only the residents of number 1 maintain a front garden, because everyone else gave up and paved over a while back. I counted 18 houses altogether, whilst trying not to look overly suspicious doing so, as any stranger entering a cul-de-sac tends to be.
Ninth Avenue is a three-lamppost one-telegraph-pole backwater. A substantial proportion of its households own vans, generally but not always white. Someone has a motor home. Leaving a broken pallet in the street isn't necessarily frowned upon. At least one of the residents goes to school, and another will once she's outgrown her pushchair. It all feels somewhat inward-looking, a housing cluster designed for a bygone age, but if anyone's ever planning a new post-Brexit suburban soap opera, maybe give Ninth Avenue a spin.
» First to Ninth Avenues, in Hayes UB3, form the longest sequence of ordinal street names in London.
» Eighteenth Road and Nineteenth Road exist near Mitcham Common, built for postwar prefabs on the site of Pollards Hill Golf Course, but First→Fourth Road, Fifth→Thirteenth Close and Fourteenth→Seventeenth Place are long-demolished.


Panel Heaters are lower cost electric heaters that work by heating the air rather than heating the object. Please find our range below of electric panel heaters, some with timer, and wall mountable.
- 24/7 LCD Timer- Peak and off peak temperature settings- Mechanical thermostat- Power on/off swi..
The PLX050E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitive..
The PLX075E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitive..
The PLX100E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitive..
The PLX125E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitive..
The PLX150E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitive..
The PLX200E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitive..
The PLXC300E is a Lot 20 compliant, modern and efficient electric panel heater. Offering intuitiv..


text:
package org.docksidestage.dbflute.bsbhv;

import java.util.List;

import org.dbflute.*;
import org.dbflute.bhv.*;
import org.dbflute.bhv.readable.*;
import org.dbflute.bhv.writable.*;
import org.dbflute.bhv.referrer.*;
import org.dbflute.cbean.*;
import org.dbflute.cbean.chelper.HpSLSFunction;
import org.dbflute.cbean.result.*;
import org.dbflute.exception.*;
import org.dbflute.optional.OptionalEntity;
import org.dbflute.outsidesql.executor.*;
import org.docksidestage.dbflute.exbhv.*;
import org.docksidestage.dbflute.bsbhv.loader.*;
import org.docksidestage.dbflute.exentity.*;
import org.docksidestage.dbflute.bsentity.dbmeta.*;
import org.docksidestage.dbflute.cbean.*;

/**
 * The behavior of (購入支払)PURCHASE_PAYMENT as TABLE.

 *

 * [primary key]
 *     PURCHASE_PAYMENT_ID
 *
 * [column]
 *     PURCHASE_PAYMENT_ID, PURCHASE_ID, PAYMENT_AMOUNT, PAYMENT_DATETIME, PAYMENT_METHOD_CODE, REGISTER_DATETIME, REGISTER_USER, UPDATE_DATETIME, UPDATE_USER
 *
 * [sequence]
 *
 *
 * [identity]
 *     PURCHASE_PAYMENT_ID
 *
 * [version-no]
 *
 *
 * [foreign table]
 *     PURCHASE
 *
 * [referrer table]
 *
 *
 * [foreign property]
 *     purchase
 *
 * [referrer property]
 *
 *

 * @author DBFlute(AutoGenerator)
 */
public abstract class BsPurchasePaymentBhv extends AbstractBehaviorWritable<PurchasePayment, PurchasePaymentCB> {

    // ===================================================================================
    //                                                                          Definition
    //                                                                          ==========
    /*df:beginQueryPath*/
    /*df:endQueryPath*/

    // ===================================================================================
    //                                                                             DB Meta
    //                                                                             =======
    /** {@inheritDoc} */
    public PurchasePaymentDbm asDBMeta() { return PurchasePaymentDbm.getInstance(); }
    /** {@inheritDoc} */
    public String asTableDbName() { return "PURCHASE_PAYMENT"; }

    // ===================================================================================
    //                                                                        New Instance
    //                                                                        ============
    /** {@inheritDoc} */
    public PurchasePaymentCB newConditionBean() { return new PurchasePaymentCB(); }

    // ===================================================================================
    //                                                                        Count Select
    //                                                                        ============
    /**
     * Select the count of uniquely-selected records by the condition-bean. {IgnorePagingCondition, IgnoreSpecifyColumn}

     * SpecifyColumn is ignored but you can use it only to remove text type column for union's distinct.
     *

     * int count = purchasePaymentBhv.selectCount(cb -> {
     *     cb.query().set...
     * });
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The count for the condition. (NotMinus)
     */
    public int selectCount(CBCall<PurchasePaymentCB> cbLambda) {
        return facadeSelectCount(createCB(cbLambda));
    }

    // ===================================================================================
    //                                                                       Entity Select
    //                                                                       =============
    /**
     * Select the entity by the condition-bean.

     * It returns not-null optional entity, so you should ...

     * If the data is always present as your business rule, alwaysPresent().

     * If it might be no data, isPresent() and orElse(), ...
     *

     * // if the data always exists as your business rule
     * purchasePaymentBhv.selectEntity(cb -> {
     *     cb.query().set...
     * }).alwaysPresent(purchasePayment -> {
     *     // called if present, or exception
     *     ... = purchasePayment.get...
     * });
     *
     * // if it might be no data, ...
     * purchasePaymentBhv.selectEntity(cb -> {
     *     cb.query().set...
     * }).ifPresent(purchasePayment -> {
     *     // called if present
     *     ... = purchasePayment.get...
     * }).orElse(() -> {
     *     // called if not present
     * });
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The optional entity selected by the condition. (NotNull: if no data, empty entity)
     * @throws EntityAlreadyDeletedException When get(), required() of return value is called and the value is null, which means entity has already been deleted (not found).
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws SelectEntityConditionNotFoundException When the condition for selecting an entity is not found.
     */
    public OptionalEntity<PurchasePayment> selectEntity(CBCall<PurchasePaymentCB> cbLambda) {
        return facadeSelectEntity(createCB(cbLambda));
    }

    protected OptionalEntity<PurchasePayment> facadeSelectEntity(PurchasePaymentCB cb) {
        return doSelectOptionalEntity(cb, typeOfSelectedEntity());
    }

    protected <ENTITY extends PurchasePayment> OptionalEntity<ENTITY> doSelectOptionalEntity(PurchasePaymentCB cb, Class<? extends ENTITY> tp) {
        return createOptionalEntity(doSelectEntity(cb, tp), cb);
    }

    protected Entity doReadEntity(ConditionBean cb) { return facadeSelectEntity(downcast(cb)).orElse(null); }

    /**
     * Select the entity by the condition-bean with deleted check.

     * If the data is always present as your business rule, this method is good.
     *

     * PurchasePayment purchasePayment = purchasePaymentBhv.selectEntityWithDeletedCheck(cb -> cb.acceptPK(1));
     * ... = purchasePayment.get...(); // the entity always be not null
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The entity selected by the condition. (NotNull: if no data, throws exception)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws SelectEntityConditionNotFoundException When the condition for selecting an entity is not found.
     */
    public PurchasePayment selectEntityWithDeletedCheck(CBCall<PurchasePaymentCB> cbLambda) {
        return facadeSelectEntityWithDeletedCheck(createCB(cbLambda));
    }

    /**
     * Select the entity by the primary-key value.
     * @param purchasePaymentId (購入支払ID): PK, ID, NotNull, BIGINT(19). (NotNull)
     * @return The optional entity selected by the PK. (NotNull: if no data, empty entity)
     * @throws EntityAlreadyDeletedException When get(), required() of return value is called and the value is null, which means entity has already been deleted (not found).
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws SelectEntityConditionNotFoundException When the condition for selecting an entity is not found.
     */
    public OptionalEntity<PurchasePayment> selectByPK(Long purchasePaymentId) {
        return facadeSelectByPK(purchasePaymentId);
    }

    protected OptionalEntity<PurchasePayment> facadeSelectByPK(Long purchasePaymentId) {
        return doSelectOptionalByPK(purchasePaymentId, typeOfSelectedEntity());
    }

    protected <ENTITY extends PurchasePayment> ENTITY doSelectByPK(Long purchasePaymentId, Class<? extends ENTITY> tp) {
        return doSelectEntity(xprepareCBAsPK(purchasePaymentId), tp);
    }

    protected <ENTITY extends PurchasePayment> OptionalEntity<ENTITY> doSelectOptionalByPK(Long purchasePaymentId, Class<? extends ENTITY> tp) {
        return createOptionalEntity(doSelectByPK(purchasePaymentId, tp), purchasePaymentId);
    }

    protected PurchasePaymentCB xprepareCBAsPK(Long purchasePaymentId) {
        assertObjectNotNull("purchasePaymentId", purchasePaymentId);
        return newConditionBean().acceptPK(purchasePaymentId);
    }

    // ===================================================================================
    //                                                                         List Select
    //                                                                         ===========
    /**
     * Select the list as result bean.
     *

     * ListResultBean<PurchasePayment> purchasePaymentList = purchasePaymentBhv.selectList(cb -> {
     *     cb.query().set...;
     *     cb.query().addOrderBy...;
     * });
     * for (PurchasePayment purchasePayment : purchasePaymentList) {
     *     ... = purchasePayment.get...;
     * }
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The result bean of selected list. (NotNull: if no data, returns empty list)
     * @throws DangerousResultSizeException When the result size is over the specified safety size.
     */
    public ListResultBean<PurchasePayment> selectList(CBCall<PurchasePaymentCB> cbLambda) {
        return facadeSelectList(createCB(cbLambda));
    }

    @Override
    protected boolean isEntityDerivedMappable() { return true; }

    // ===================================================================================
    //                                                                         Page Select
    //                                                                         ===========
    /**
     * Select the page as result bean.

     * (both count-select and paging-select are executed)
     *

     * PagingResultBean<PurchasePayment> page = purchasePaymentBhv.selectPage(cb -> {
     *     cb.query().set...
     *     cb.query().addOrderBy...
     *     cb.paging(20, 3); // 20 records per a page and current page number is 3
     * });
     * int allRecordCount = page.getAllRecordCount();
     * int allPageCount = page.getAllPageCount();
     * boolean isExistPrePage = page.isExistPrePage();
     * boolean isExistNextPage = page.isExistNextPage();
     * ...
     * for (PurchasePayment purchasePayment : page) {
     *     ... = purchasePayment.get...;
     * }
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The result bean of selected page. (NotNull: if no data, returns bean as empty list)
     * @throws DangerousResultSizeException When the result size is over the specified safety size.
     */
    public PagingResultBean<PurchasePayment> selectPage(CBCall<PurchasePaymentCB> cbLambda) {
        return facadeSelectPage(createCB(cbLambda));
    }

    // ===================================================================================
    //                                                                       Cursor Select
    //                                                                       =============
    /**
     * Select the cursor by the condition-bean.
     *

     * purchasePaymentBhv.selectCursor(cb -> {
     *     cb.query().set...
     * }, member -> {
     *     ... = member.getMemberName();
     * });
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @param entityLambda The handler of entity row of PurchasePayment. (NotNull)
     */
    public void selectCursor(CBCall<PurchasePaymentCB> cbLambda, EntityRowHandler<PurchasePayment> entityLambda) {
        facadeSelectCursor(createCB(cbLambda), entityLambda);
    }

    // ===================================================================================
    //                                                                       Scalar Select
    //                                                                       =============
    /**
     * Select the scalar value derived by a function from uniquely-selected records.

     * You should call a function method after this method called like as follows:
     *

     * purchasePaymentBhv.selectScalar(Date.class).max(cb -> {
     *     cb.specify().column...; // required for the function
     *     cb.query().set...
     * });
     *

     * @param <RESULT> The type of result.
     * @param resultType The type of result. (NotNull)
     * @return The scalar function object to specify function for scalar value. (NotNull)
     */
    public <RESULT> HpSLSFunction<PurchasePaymentCB, RESULT> selectScalar(Class<RESULT> resultType) {
        return facadeScalarSelect(resultType);
    }

    // ===================================================================================
    //                                                                            Sequence
    //                                                                            ========
    @Override
    protected Number doReadNextVal() {
        String msg = "This table is NOT related to sequence: " + asTableDbName();
        throw new UnsupportedOperationException(msg);
    }

    // ===================================================================================
    //                                                                       Load Referrer
    //                                                                       =============
    /**
     * Load referrer for the list by the referrer loader.
     *

     * List<Member> memberList = memberBhv.selectList(cb -> {
     *     cb.query().set...
     * });
     * memberBhv.load(memberList, memberLoader -> {
     *     memberLoader.loadPurchase(purchaseCB -> {
     *         purchaseCB.setupSelect...
     *         purchaseCB.query().set...
     *         purchaseCB.query().addOrderBy...
     *     }); // you can also load nested referrer from here
     *     //}).withNestedReferrer(purchaseLoader -> {
     *     //    purchaseLoader.loadPurchasePayment(...);
     *     //});
     *
     *     // you can also pull out foreign table and load its referrer
     *     // (setupSelect of the foreign table should be called)
     *     //memberLoader.pulloutMemberStatus().loadMemberLogin(...)
     * });
     * for (Member member : memberList) {
     *     List<Purchase> purchaseList = member.getPurchaseList();
     *     for (Purchase purchase : purchaseList) {
     *         ...
     *     }
     * }
     *

     * About internal policy, the value of primary key (and others too) is treated as case-insensitive.

     * The condition-bean, which the set-upper provides, has order by FK before callback.
     * @param purchasePaymentList The entity list of purchasePayment. (NotNull)
     * @param loaderLambda The callback to handle the referrer loader for actually loading referrer. (NotNull)
     */
    public void load(List<PurchasePayment> purchasePaymentList, ReferrerLoaderHandler<LoaderOfPurchasePayment> loaderLambda) {
        xassLRArg(purchasePaymentList, loaderLambda);
        loaderLambda.handle(new LoaderOfPurchasePayment().ready(purchasePaymentList, _behaviorSelector));
    }

    /**
     * Load referrer for the entity by the referrer loader.
     *

     * Member member = memberBhv.selectEntityWithDeletedCheck(cb -> cb.acceptPK(1));
     * memberBhv.load(member, memberLoader -> {
     *     memberLoader.loadPurchase(purchaseCB -> {
     *         purchaseCB.setupSelect...
     *         purchaseCB.query().set...
     *         purchaseCB.query().addOrderBy...
     *     }); // you can also load nested referrer from here
     *     //}).withNestedReferrer(purchaseLoader -> {
     *     //    purchaseLoader.loadPurchasePayment(...);
     *     //});
     *
     *     // you can also pull out foreign table and load its referrer
     *     // (setupSelect of the foreign table should be called)
     *     //memberLoader.pulloutMemberStatus().loadMemberLogin(...)
     * });
     * List<Purchase> purchaseList = member.getPurchaseList();
     * for (Purchase purchase : purchaseList) {
     *     ...
     * }
     *

     * About internal policy, the value of primary key (and others too) is treated as case-insensitive.

     * The condition-bean, which the set-upper provides, has order by FK before callback.
     * @param purchasePayment The entity of purchasePayment. (NotNull)
     * @param loaderLambda The callback to handle the referrer loader for actually loading referrer. (NotNull)
     */
    public void load(PurchasePayment purchasePayment, ReferrerLoaderHandler<LoaderOfPurchasePayment> loaderLambda) {
        xassLRArg(purchasePayment, loaderLambda);
        loaderLambda.handle(new LoaderOfPurchasePayment().ready(xnewLRAryLs(purchasePayment), _behaviorSelector));
    }

    // ===================================================================================
    //                                                                   Pull out Relation
    //                                                                   =================
    /**
     * Pull out the list of foreign table 'Purchase'.
     * @param purchasePaymentList The list of purchasePayment. (NotNull, EmptyAllowed)
     * @return The list of foreign table. (NotNull, EmptyAllowed, NotNullElement)
     */
    public List<Purchase> pulloutPurchase(List<PurchasePayment> purchasePaymentList)
    { return helpPulloutInternally(purchasePaymentList, "purchase"); }

    // ===================================================================================
    //                                                                      Extract Column
    //                                                                      ==============
    /**
     * Extract the value list of (single) primary key purchasePaymentId.
     * @param purchasePaymentList The list of purchasePayment. (NotNull, EmptyAllowed)
     * @return The list of the column value. (NotNull, EmptyAllowed, NotNullElement)
     */
    public List<Long> extractPurchasePaymentIdList(List<PurchasePayment> purchasePaymentList)
    { return helpExtractListInternally(purchasePaymentList, "purchasePaymentId"); }

    // ===================================================================================
    //                                                                       Entity Update
    //                                                                       =============
    /**
     * Insert the entity modified-only. (DefaultConstraintsEnabled)
     *

     * PurchasePayment purchasePayment = new PurchasePayment();
     * // if auto-increment, you don't need to set the PK value
     * purchasePayment.setFoo...(value);
     * purchasePayment.setBar...(value);
     * // you don't need to set values of common columns
     * //purchasePayment.setRegisterUser(value);
     * //purchasePayment.set...;
     * purchasePaymentBhv.insert(purchasePayment);
     * ... = purchasePayment.getPK...(); // if auto-increment, you can get the value after
     *

     *
While, when the entity is created by select, all columns are registered.

     * @param purchasePayment The entity of insert. (NotNull, PrimaryKeyNullAllowed: when auto-increment)
     * @throws EntityAlreadyExistsException When the entity already exists. (unique constraint violation)
     */
    public void insert(PurchasePayment purchasePayment) {
        doInsert(purchasePayment, null);
    }

    /**
     * Update the entity modified-only. (ZeroUpdateException, NonExclusiveControl)

     * By PK as default, and also you can update by unique keys using entity's uniqueOf().
     *

     * PurchasePayment purchasePayment = new PurchasePayment();
     * purchasePayment.setPK...(value); // required
     * purchasePayment.setFoo...(value); // you should set only modified columns
     * // you don't need to set values of common columns
     * //purchasePayment.setRegisterUser(value);
     * //purchasePayment.set...;
     * // if exclusive control, the value of concurrency column is required
     * purchasePayment.setVersionNo(value);
     * purchasePaymentBhv.update(purchasePayment);
     *

     * @param purchasePayment The entity of update. (NotNull, PrimaryKeyNotNull)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws EntityAlreadyExistsException When the entity already exists. (unique constraint violation)
     */
    public void update(PurchasePayment purchasePayment) {
        doUpdate(purchasePayment, null);
    }

    /**
     * Insert or update the entity modified-only. (DefaultConstraintsEnabled, NonExclusiveControl)

     * if (the entity has no PK) { insert() } else { update(), but no data, insert() }

     *
Also you can update by unique keys using entity's uniqueOf().

     * @param purchasePayment The entity of insert or update. (NotNull, ...depends on insert or update)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws EntityAlreadyExistsException When the entity already exists. (unique constraint violation)
     */
    public void insertOrUpdate(PurchasePayment purchasePayment) {
        doInsertOrUpdate(purchasePayment, null, null);
    }

    /**
     * Delete the entity. (ZeroUpdateException, NonExclusiveControl)

     * By PK as default, and also you can delete by unique keys using entity's uniqueOf().
     *

     * PurchasePayment purchasePayment = new PurchasePayment();
     * purchasePayment.setPK...(value); // required
     * // if exclusive control, the value of concurrency column is required
     * purchasePayment.setVersionNo(value);
     * try {
     *     purchasePaymentBhv.delete(purchasePayment);
     * } catch (EntityAlreadyUpdatedException e) { // if concurrent update
     *     ...
     * }
     *

     * @param purchasePayment The entity of delete. (NotNull, PrimaryKeyNotNull)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     */
    public void delete(PurchasePayment purchasePayment) {
        doDelete(purchasePayment, null);
    }

    // ===================================================================================
    //                                                                        Batch Update
    //                                                                        ============
    /**
     * Batch-insert the entity list modified-only of same-set columns. (DefaultConstraintsEnabled)

     * This method uses executeBatch() of java.sql.PreparedStatement.

     *
The columns of least common multiple are registered like this:

     *

     * for (... : ...) {
     *     PurchasePayment purchasePayment = new PurchasePayment();
     *     purchasePayment.setFooName("foo");
     *     if (...) {
     *         purchasePayment.setFooPrice(123);
     *     }
     *     // FOO_NAME and FOO_PRICE (and record meta columns) are registered
     *     // FOO_PRICE not-called in any entities are registered as null without default value
     *     // columns not-called in all entities are registered as null or default value
     *     purchasePaymentList.add(purchasePayment);
     * }
     * purchasePaymentBhv.batchInsert(purchasePaymentList);
     *

     *
While, when the entities are created by select, all columns are registered.

     *
And if the table has an identity, entities after the process don't have incremented values.
     * (When you use the (normal) insert(), you can get the incremented value from your entity)

     * @param purchasePaymentList The list of the entity. (NotNull, EmptyAllowed, PrimaryKeyNullAllowed: when auto-increment)
     * @return The array of inserted count. (NotNull, EmptyAllowed)
     */
    public int[] batchInsert(List<PurchasePayment> purchasePaymentList) {
        return doBatchInsert(purchasePaymentList, null);
    }

    /**
     * Batch-update the entity list modified-only of same-set columns. (NonExclusiveControl)

     * This method uses executeBatch() of java.sql.PreparedStatement.

     * You should specify same-set columns to all entities like this:
     *

     * for (... : ...) {
     *     PurchasePayment purchasePayment = new PurchasePayment();
     *     purchasePayment.setFooName("foo");
     *     if (...) {
     *         purchasePayment.setFooPrice(123);
     *     } else {
     *         purchasePayment.setFooPrice(null); // updated as null
     *         //purchasePayment.setFooDate(...); // *not allowed, fragmented
     *     }
     *     // FOO_NAME and FOO_PRICE (and record meta columns) are updated
     *     // (others are not updated: their values are kept)
     *     purchasePaymentList.add(purchasePayment);
     * }
     * purchasePaymentBhv.batchUpdate(purchasePaymentList);
     *

     * @param purchasePaymentList The list of the entity. (NotNull, EmptyAllowed, PrimaryKeyNotNull)
     * @return The array of updated count. (NotNull, EmptyAllowed)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     */
    public int[] batchUpdate(List<PurchasePayment> purchasePaymentList) {
        return doBatchUpdate(purchasePaymentList, null);
    }

    /**
     * Batch-delete the entity list. (NonExclusiveControl)

     * This method uses executeBatch() of java.sql.PreparedStatement.
     * @param purchasePaymentList The list of the entity. (NotNull, EmptyAllowed, PrimaryKeyNotNull)
     * @return The array of deleted count. (NotNull, EmptyAllowed)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     */
    public int[] batchDelete(List<PurchasePayment> purchasePaymentList) {
        return doBatchDelete(purchasePaymentList, null);
    }

    // ===================================================================================
    //                                                                        Query Update
    //                                                                        ============
    /**
     * Insert the several entities by query (modified-only for fixed value).
     *

     * purchasePaymentBhv.queryInsert(new QueryInsertSetupper<PurchasePayment, PurchasePaymentCB>() {
     *     public ConditionBean setup(PurchasePayment entity, PurchasePaymentCB intoCB) {
     *         FooCB cb = FooCB();
     *         cb.setupSelect_Bar();
     *
     *         // mapping
     *         intoCB.specify().columnMyName().mappedFrom(cb.specify().columnFooName());
     *         intoCB.specify().columnMyCount().mappedFrom(cb.specify().columnFooCount());
     *         intoCB.specify().columnMyDate().mappedFrom(cb.specify().specifyBar().columnBarDate());
     *         entity.setMyFixedValue("foo"); // fixed value
     *         // you don't need to set values of common columns
     *         //entity.setRegisterUser(value);
     *         //entity.set...;
     *         // you don't need to set a value of concurrency column
     *         //entity.setVersionNo(value);
     *
     *         return cb;
     *     }
     * });
     *

     * @param manyArgLambda The callback to set up query-insert. (NotNull)
     * @return The inserted count.
     */
    public int queryInsert(QueryInsertSetupper<PurchasePayment, PurchasePaymentCB> manyArgLambda) {
        return doQueryInsert(manyArgLambda, null);
    }

    /**
     * Update the several entities by query non-strictly modified-only. (NonExclusiveControl)
     *

     * PurchasePayment purchasePayment = new PurchasePayment();
     * // you don't need to set PK value
     * //purchasePayment.setPK...(value);
     * purchasePayment.setFoo...(value); // you should set only modified columns
     * // you don't need to set values of common columns
     * //purchasePayment.setRegisterUser(value);
     * //purchasePayment.set...;
     * // you don't need to set a value of concurrency column
     * // (auto-increment for version number is valid though non-exclusive control)
     * //purchasePayment.setVersionNo(value);
     * purchasePaymentBhv.queryUpdate(purchasePayment, cb -> {
     *     cb.query().setFoo...
     * });
     *

     * @param purchasePayment The entity that contains update values. (NotNull, PrimaryKeyNullAllowed)
     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The updated count.
     * @throws NonQueryUpdateNotAllowedException When the query has no condition.
     */
    public int queryUpdate(PurchasePayment purchasePayment, CBCall<PurchasePaymentCB> cbLambda) {
        return doQueryUpdate(purchasePayment, createCB(cbLambda), null);
    }

    /**
     * Delete the several entities by query. (NonExclusiveControl)
     *

     * purchasePaymentBhv.queryDelete(purchasePayment, cb -> {
     *     cb.query().setFoo...
     * });
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @return The deleted count.
     * @throws NonQueryDeleteNotAllowedException When the query has no condition.
     */
    public int queryDelete(CBCall<PurchasePaymentCB> cbLambda) {
        return doQueryDelete(createCB(cbLambda), null);
    }

    // ===================================================================================
    //                                                                      Varying Update
    //                                                                      ==============
    // -----------------------------------------------------
    //                                         Entity Update
    //                                         -------------
    /**
     * Insert the entity with varying requests.

     * For example, disableCommonColumnAutoSetup(), disablePrimaryKeyIdentity().

     * Other specifications are same as insert(entity).
     *

     * PurchasePayment purchasePayment = new PurchasePayment();
     * // if auto-increment, you don't need to set the PK value
     * purchasePayment.setFoo...(value);
     * purchasePayment.setBar...(value);
     * purchasePaymentBhv.varyingInsert(purchasePayment, op -> {
     *     // you can insert by your values for common columns
     *     op.disableCommonColumnAutoSetup();
     * });
     * ... = purchasePayment.getPK...(); // if auto-increment, you can get the value after
     *

     * @param purchasePayment The entity of insert. (NotNull, PrimaryKeyNullAllowed: when auto-increment)
     * @param opLambda The callback for option of insert for varying requests. (NotNull)
     * @throws EntityAlreadyExistsException When the entity already exists. (unique constraint violation)
     */
    public void varyingInsert(PurchasePayment purchasePayment, WritableOptionCall<PurchasePaymentCB, InsertOption<PurchasePaymentCB>> opLambda) {
        doInsert(purchasePayment, createInsertOption(opLambda));
    }

    /**
     * Update the entity with varying requests modified-only. (ZeroUpdateException, NonExclusiveControl)

     * For example, self(selfCalculationSpecification), specify(updateColumnSpecification), disableCommonColumnAutoSetup().

     * Other specifications are same as update(entity).
     *

     * PurchasePayment purchasePayment = new PurchasePayment();
     * purchasePayment.setPK...(value); // required
     * purchasePayment.setOther...(value); // you should set only modified columns
     * // if exclusive control, the value of concurrency column is required
     * purchasePayment.setVersionNo(value);
     * // you can update by self calculation values
     * purchasePaymentBhv.varyingUpdate(purchasePayment, op -> {
     *     op.self(cb -> {
     *         cb.specify().columnXxxCount();
     *     }).plus(1); // XXX_COUNT = XXX_COUNT + 1
     * });
     *

     * @param purchasePayment The entity of update. (NotNull, PrimaryKeyNotNull)
     * @param opLambda The callback for option of update for varying requests. (NotNull)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws EntityAlreadyExistsException When the entity already exists. (unique constraint violation)
     */
    public void varyingUpdate(PurchasePayment purchasePayment, WritableOptionCall<PurchasePaymentCB, UpdateOption<PurchasePaymentCB>> opLambda) {
        doUpdate(purchasePayment, createUpdateOption(opLambda));
    }

    /**
     * Insert or update the entity with varying requests. (ExclusiveControl: when update)

     * Other specifications are same as insertOrUpdate(entity).
     * @param purchasePayment The entity of insert or update. (NotNull)
     * @param insertOpLambda The callback for option of insert for varying requests. (NotNull)
     * @param updateOpLambda The callback for option of update for varying requests. (NotNull)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     * @throws EntityAlreadyExistsException When the entity already exists. (unique constraint violation)
     */
    public void varyingInsertOrUpdate(PurchasePayment purchasePayment, WritableOptionCall<PurchasePaymentCB, InsertOption<PurchasePaymentCB>> insertOpLambda, WritableOptionCall<PurchasePaymentCB, UpdateOption<PurchasePaymentCB>> updateOpLambda) {
        doInsertOrUpdate(purchasePayment, createInsertOption(insertOpLambda), createUpdateOption(updateOpLambda));
    }

    /**
     * Delete the entity with varying requests. (ZeroUpdateException, NonExclusiveControl)

     * Now a valid option does not exist.

     * Other specifications are same as delete(entity).
     * @param purchasePayment The entity of delete. (NotNull, PrimaryKeyNotNull, ConcurrencyColumnNotNull)
     * @param opLambda The callback for option of delete for varying requests. (NotNull)
     * @throws EntityAlreadyDeletedException When the entity has already been deleted. (not found)
     * @throws EntityDuplicatedException When the entity has been duplicated.
     */
    public void varyingDelete(PurchasePayment purchasePayment, WritableOptionCall<PurchasePaymentCB, DeleteOption<PurchasePaymentCB>> opLambda) {
        doDelete(purchasePayment, createDeleteOption(opLambda));
    }

    // -----------------------------------------------------
    //                                          Batch Update
    //                                          ------------
    /**
     * Batch-insert the list with varying requests.

     * For example, disableCommonColumnAutoSetup()
     * , disablePrimaryKeyIdentity(), limitBatchInsertLogging().

     * Other specifications are same as batchInsert(entityList).
     * @param purchasePaymentList The list of the entity. (NotNull, EmptyAllowed, PrimaryKeyNotNull)
     * @param opLambda The callback for option of insert for varying requests. (NotNull)
     * @return The array of updated count. (NotNull, EmptyAllowed)
     */
    public int[] varyingBatchInsert(List<PurchasePayment> purchasePaymentList, WritableOptionCall<PurchasePaymentCB, InsertOption<PurchasePaymentCB>> opLambda) {
        return doBatchInsert(purchasePaymentList, createInsertOption(opLambda));
    }

    /**
     * Batch-update the list with varying requests.

     * For example, self(selfCalculationSpecification), specify(updateColumnSpecification)
     * , disableCommonColumnAutoSetup(), limitBatchUpdateLogging().

     * Other specifications are same as batchUpdate(entityList).
     * @param purchasePaymentList The list of the entity. (NotNull, EmptyAllowed, PrimaryKeyNotNull)
     * @param opLambda The callback for option of update for varying requests. (NotNull)
     * @return The array of updated count. (NotNull, EmptyAllowed)
     */
    public int[] varyingBatchUpdate(List<PurchasePayment> purchasePaymentList, WritableOptionCall<PurchasePaymentCB, UpdateOption<PurchasePaymentCB>> opLambda) {
        return doBatchUpdate(purchasePaymentList, createUpdateOption(opLambda));
    }

    /**
     * Batch-delete the list with varying requests.

     * For example, limitBatchDeleteLogging().

     * Other specifications are same as batchDelete(entityList).
     * @param purchasePaymentList The list of the entity. (NotNull, EmptyAllowed, PrimaryKeyNotNull)
     * @param opLambda The callback for option of delete for varying requests. (NotNull)
     * @return The array of deleted count. (NotNull, EmptyAllowed)
     */
    public int[] varyingBatchDelete(List<PurchasePayment> purchasePaymentList, WritableOptionCall<PurchasePaymentCB, DeleteOption<PurchasePaymentCB>> opLambda) {
        return doBatchDelete(purchasePaymentList, createDeleteOption(opLambda));
    }

    // -----------------------------------------------------
    //                                          Query Update
    //                                          ------------
    /**
     * Insert the several entities by query with varying requests (modified-only for fixed value).

     * For example, disableCommonColumnAutoSetup(), disablePrimaryKeyIdentity().

     * Other specifications are same as queryInsert(entity, setupper).
     * @param manyArgLambda The set-upper of query-insert. (NotNull)
     * @param opLambda The callback for option of insert for varying requests. (NotNull)
     * @return The inserted count.
     */
    public int varyingQueryInsert(QueryInsertSetupper<PurchasePayment, PurchasePaymentCB> manyArgLambda, WritableOptionCall<PurchasePaymentCB, InsertOption<PurchasePaymentCB>> opLambda) {
        return doQueryInsert(manyArgLambda, createInsertOption(opLambda));
    }

    /**
     * Update the several entities by query with varying requests non-strictly modified-only. {NonExclusiveControl}

     * For example, self(selfCalculationSpecification), specify(updateColumnSpecification)
     * , disableCommonColumnAutoSetup(), allowNonQueryUpdate().

     * Other specifications are same as queryUpdate(entity, cb).
     *

     * // ex) you can update by self calculation values
     * PurchasePayment purchasePayment = new PurchasePayment();
     * // you don't need to set PK value
     * //purchasePayment.setPK...(value);
     * purchasePayment.setOther...(value); // you should set only modified columns
     * // you don't need to set a value of concurrency column
     * // (auto-increment for version number is valid though non-exclusive control)
     * //purchasePayment.setVersionNo(value);
     * purchasePaymentBhv.varyingQueryUpdate(purchasePayment, cb -> {
     *     cb.query().setFoo...
     * }, op -> {
     *     op.self(colCB -> {
     *         colCB.specify().columnFooCount();
     *     }).plus(1); // FOO_COUNT = FOO_COUNT + 1
     * });
     *

     * @param purchasePayment The entity that contains update values. (NotNull) {PrimaryKeyNotRequired}
     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @param opLambda The callback for option of update for varying requests. (NotNull)
     * @return The updated count.
     * @throws NonQueryUpdateNotAllowedException When the query has no condition (if not allowed).
     */
    public int varyingQueryUpdate(PurchasePayment purchasePayment, CBCall<PurchasePaymentCB> cbLambda, WritableOptionCall<PurchasePaymentCB, UpdateOption<PurchasePaymentCB>> opLambda) {
        return doQueryUpdate(purchasePayment, createCB(cbLambda), createUpdateOption(opLambda));
    }

    /**
     * Delete the several entities by query with varying requests non-strictly.

     * For example, allowNonQueryDelete().

     * Other specifications are same as queryDelete(cb).
     *

     * purchasePaymentBhv.queryDelete(purchasePayment, cb -> {
     *     cb.query().setFoo...
     * }, op -> {
     *     op...
     * });
     *

     * @param cbLambda The callback for condition-bean of PurchasePayment. (NotNull)
     * @param opLambda The callback for option of delete for varying requests. (NotNull)
     * @return The deleted count.
     * @throws NonQueryDeleteNotAllowedException When the query has no condition (if not allowed).
     */
    public int varyingQueryDelete(CBCall<PurchasePaymentCB> cbLambda, WritableOptionCall<PurchasePaymentCB, DeleteOption<PurchasePaymentCB>> opLambda) {
        return doQueryDelete(createCB(cbLambda), createDeleteOption(opLambda));
    }

    // ===================================================================================
    //                                                                          OutsideSql
    //                                                                          ==========
    /**
     * Prepare the all facade executor of outside-SQL to execute it.
     *

     * // main style
     * purchasePaymentBhv.outideSql().selectEntity(pmb); // optional
     * purchasePaymentBhv.outideSql().selectList(pmb); // ListResultBean
     * purchasePaymentBhv.outideSql().selectPage(pmb); // PagingResultBean
     * purchasePaymentBhv.outideSql().selectPagedListOnly(pmb); // ListResultBean
     * purchasePaymentBhv.outideSql().selectCursor(pmb, handler); // (by handler)
     * purchasePaymentBhv.outideSql().execute(pmb); // int (updated count)
     * purchasePaymentBhv.outideSql().call(pmb); // void (pmb has OUT parameters)
     *
     * // traditional style
     * purchasePaymentBhv.outideSql().traditionalStyle().selectEntity(path, pmb, entityType);
     * purchasePaymentBhv.outideSql().traditionalStyle().selectList(path, pmb, entityType);
     * purchasePaymentBhv.outideSql().traditionalStyle().selectPage(path, pmb, entityType);
     * purchasePaymentBhv.outideSql().traditionalStyle().selectPagedListOnly(path, pmb, entityType);
     * purchasePaymentBhv.outideSql().traditionalStyle().selectCursor(path, pmb, handler);
     * purchasePaymentBhv.outideSql().traditionalStyle().execute(path, pmb);
     *
     * // options
     * purchasePaymentBhv.outideSql().removeBlockComment().selectList()
     * purchasePaymentBhv.outideSql().removeLineComment().selectList()
     * purchasePaymentBhv.outideSql().formatSql().selectList()
     *

     *
The invoker of behavior command should be not null when you call this method.

     * @return The new-created all facade executor of outside-SQL. (NotNull)
     */
    public OutsideSqlAllFacadeExecutor<PurchasePaymentBhv> outsideSql() {
        return doOutsideSql();
    }

    // ===================================================================================
    //                                                                         Type Helper
    //                                                                         ===========
    protected Class<? extends PurchasePayment> typeOfSelectedEntity() { return PurchasePayment.class; }
    protected Class<PurchasePayment> typeOfHandlingEntity() { return PurchasePayment.class; }
    protected Class<PurchasePaymentCB> typeOfHandlingConditionBean() { return PurchasePaymentCB.class; }
}

redpajama_set_name: RedPajamaGithub